为什么我可以自动连线或注入pojo,但是我无法自动连线或注入RestTemplate [英] why can I autowire or inject pojo but I can't autowire or inject RestTemplate

查看:178
本文介绍了为什么我可以自动连线或注入pojo,但是我无法自动连线或注入RestTemplate的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我在这个论坛上阅读了很多关于尝试自动连线pojo时发生的类似问题,通常修复的答案与 component-scan @Component / @Controller 。但是在我的情况下,我设法自动连接我的pojo(Mas60010),但是我无法自动连接 RestTemplate ObjectMapper 从我没有编码的包中的其他对象。



为了简单起见,我刚刚提到 RestTemplate 。我做错了什么?我猜这个问题是使用库或配置。注意:请不要仅仅通过显示与他自己的pojo相关的问题来指出这个问题。你可以看到这不是我的问题,因为我能够管理这个。问题在于项目中包含的jar包中的类。

  package com.ma.mhe.log.handler; 

import com.fasterxml.jackson.databind.ObjectMapper;
import org.springframework.web.client.RestTemplate;

@Component
public class Lo_DisplayHandler extends Lo_Handler {

@Autowired private Mas60010 _mas60010; //这个工作完美
@Autowired私人RestTemplate restTemplate; //这总是导致nullPointException

mvc-dispatcher-servlet.xml

 < context:annotation-config /> 
< mvc:注释驱动/>
< context:component-scan base-package =com.ma.mhe.log.handle,com.ma.m.log.domain/>
< context:property-placeholder location =classpath:restServices.properties/>

< mvc:resources mapping =/ **location =//>

< bean class =org.springframework.web.servlet.view.InternalResourceViewResolver>
< property name =prefix>
< value> / WEB-INF / pages /< / value>
< / property>
< property name =suffix>
< value> .jsp< / value>
< / property>
< / bean>

< bean class =org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter>
< property name =messageConverters>
< list>
< ref bean =jsonMessageConverter/>
< / list>
< / property>
< / bean>

< bean id =jsonMessageConverterclass =org.springframework.http.converter.json.MappingJackson2HttpMessageConverter>
< / bean>

<! - 我期待这一行是enouth - >
< bean id =restTemplateclass =org.springframework.web.client.RestTemplate>
< / bean>

// Pojo - 我可以自动连线

  package com.ma.log.domain; 

import org.springframework.stereotype.Service;

@Service
public class Mas60010 {

所有库




  • validation-api-1.0.0.GA.jar

  • aopalliance-1.0。 jar

  • commons-logging-1.1.1.jar

  • db2java.zip

  • hibernate-validator-4.1.0.Final.jar

  • hibernate-validator-annotation-processor-4.1.0.Final.jar

  • jackson-annotations-2.2.3.jar
  • jackson-core-2.2.3.jar

  • jackson- databind-2.2.3.jar

  • slf4j-api-1.7.5.jar

  • spring-aop-4.1.2。 RELEASE.jar

  • spring-beans-4.1.2.RELEASE.jar

  • spring-context-4.1.2.RELEASE。 jar

  • spring-context-support-4.1.2.RELEASE.jar

  • spring-core-4.1.2.RELEASE。 jar

  • spring-expression-4.1.2.RELEASE.jar

  • spring-web-4.1.2.RELEASE.jar

  • spring-webmvc-4.1.2.RELEASE.jar

  • upload.jar



    • // StackTrace

        [12/17/14 10:38:54:243 CST] 00000033 SystemErr R在com.ma.mhe.log.handler.Lo_DisplayHandler.lastPage(Lo_DisplayHandler.java:181)
      [12/17/14 10:38:54:246 CST] 00000033 SystemErr R在com.ma.mhe。 log.Lo_Servlet.doDisDis(Lo_Servlet.java:164)
      [12/17/14 10:38:54:248 CST] 00000033 SystemErr R在com.ma.mhe.log.Lo_Servlet.doProcess(Lo_Servlet.java :51)
      [12/17/14 10:38:54:250 CST] 00000033 SystemErr R at com.ma.mhe.log.Lo_Servlet.doPost(Lo_Servlet.java:24)
      [12 / 17/14 10:38:54:253 CST] 00000033 javax.servlet.http.HttpServlet.service(HttpServlet.java:595)上的SystemErr R
      [12/17/14 10:38:54:255 CST] 00000033 SystemErr R at javax.servlet.http.HttpServlet.service(HttpServlet.java:668)
      [12/17/14 10:38:54:257 CST] 00000033 SystemErr R在com.ibm.ws.webcontainer.servlet .ServletWrapper.service(ServletWrapper.java:1274)
      [12/17/14 10:38:54:260 CST] 00000033 SystemErr R在com.ibm.ws.webcontainer.servlet.ServletWrapper.handleRequest(ServletWrapper。 java:767)
      [12/17/14 10:38:54:261 CST] 00000033 SystemErr R在com.ibm.ws.webcontainer.servlet.ServletWrapper.handleRequest(ServletWrapper.java:469)
      [12/17/14 10:38:54:262 CST] 00000033 SystemErr R at com.ibm.ws.webcontainer.filter.WebAppFilterManager.invokeFilters(WebAppFilterManager.java:1060)
      [12/17/14 10:38:54:263 CST] 00000033 SystemErr R at com.ibm.ws.webcontainer.webapp.WebAppRequestDispatcher.dispatch(WebAppRequestDispatcher.java:1377)
      [12/17/14 10:38:54:265 CST] 00000033 SystemErr R at com.ibm.ws .webcontainer.webapp.WebAppRequestDispatcher.forward(WebAppRequestDispatcher.java:185)
      [12/17/14 10:38:54:266 CST] 00000033 SystemErr R在com.ma.mhe.Mhe_ControllerServlet.doProcess(Mhe_ControllerServlet。 java:83)
      [12/17/14 10:38:54:267 CST] 00000033 SystemErr R在com.ma.mhe.Mhe_ControllerServlet.doPost(Mhe_ControllerServlet.java:32)
      [12 / 17/14 10:38:54:268 CST] 00000033 javax.servlet.http.HttpServlet.service(HttpServlet.java:595)上的SystemErr R
      [12/17/14 10:38:54:269 CST ] 00000033 javEr的SystemErr R ax.servlet.http.HttpServlet.service(HttpServlet.java:668)
      [12/17/14 10:38:54:270 CST] 00000033 SystemErr R在com.ibm.ws.webcontainer.servlet.ServletWrapper .service(ServletWrapper.java:1274)
      [12/17/14 10:38:54:271 CST] 00000033 SystemErr R在com.ibm.ws.webcontainer.servlet.ServletWrapper.handleRequest(ServletWrapper.java: 767)
      [12/17/14 10:38:54:272 CST] 00000033 com.ibm.ws.webcontainer.servlet.ServletWrapper.handleRequest(ServletWrapper.java:469)上的SystemErr R
      [ 12/17/14 10:38:54:273 CST] 00000033 SystemErr R at com.ibm.ws.webcontainer.filter.WebAppFilterManager.invokeFilters(WebAppFilterManager.java:1060)
      [12/17/14 10: 38:54:275 CST] 00000033 SystemErr R at com.ibm.ws.webcont ainer.servlet.CacheServletWrapper.handleRequest(CacheServletWrapper.java:81)
      [12/17/14 10:38:54:276 CST] 00000033 SystemErr R在com.ibm.ws.webcontainer.WebContainer.handleRequest(WebContainer .java:885)
      [12/17/14 10:38:54:277 CST] 00000033 SystemErr R at com.ibm.ws.webcontainer.osgi.DynamicVirtualHost $ 2.run(DynamicVirtualHost.java:266)
      [12/17/14 10:38:54:277 CST] 00000033 SystemErr R at com.ibm.ws.http.dispatcher.internal.channel.HttpDispatcherLink $ TaskWrapper.run(HttpDispatcherLink.java:776)
      [12/17/14 10:38:54:278 CST] 00000033 java.util.concurrent.ThreadPoolExecutor的SystemErr R $ Worker.runTask(ThreadPoolExecutor.java:895)
      [12/17/14 10 :38:54:279 CST] 00000033 SystemErr R at java.util.concurrent.ThreadPoolExecutor $ Worker.run(ThreadPoolExecutor.java:918)
      [12/17/14 10:38:54:280 CST] 00000033 SystemErr R java.lang.Thread.run(Thread .java:662)

      IBM WebSphere Liberty Profile启用功能

       < featureManager> 
      < feature> jsp-2.2< / feature>
      < feature> localConnector-1.0< / feature>
      < feature> jdbc-4.0< / feature>
      < feature> jaxrs-1.1< / feature>
      < feature> json-1.0< / feature>
      < feature> cdi-1.0< / feature>
      < feature> managedBeans-1.0< / feature>
      < feature> beanValidation-1.0< / feature>
      < / featureManager>

      // class Lo_DisplayHandler

        @Component 
      public class Lo_DisplayHandler extends Lo_Handler {

      public Lo_DisplayHandler(){
      super();
      }

      @Autowired
      私人Mas60010 _mas60010;
      @Autowired私人RestTemplate restTemplate;


      public Lo_DisplayHandler(HttpServletRequest request,HttpServletResponse response){
      super();

      this.request = request;
      this.response = response;
      }



      public void lastPage(){
      // RestTemplate restTemplate = new RestTemplate(); //如果我取消注释此行并注释@Autowired它将工作
      ObjectMapper mapper = new ObjectMapper();
      尝试{


      myPojoParameters ...

      //如果我选择自动连线而不是新的RestTemplate()$ b $,则下一行将上升nullPointExcepetion b LogDisplay _l = restTemplate.postForObject(myServiceUrl,myPojoParameters,LogDisplay.class);
      Lo_DisplayRecord lo_DisplayRecord = new Lo_DisplayRecord();

      ArrayList< Lo_DisplayRecord> displayValues = new ArrayList< Lo_DisplayRecord>(); (int i = 0; i< _l.getDisplayValues()。size(); i ++){
      lo_DisplayRecord = mapper.convertValue(_l.getDisplayValues()。get ),Lo_DisplayRecord.class);
      displayValues.add(lo_DisplayRecord);
      }

      一些不相关的操作...
      } catch(异常e){
      e.printStackTrace();



      // Lo_Servlet

        com.ma.mhe.log; 

      import java.io.IOException;
      import javax.servlet.ServletException;
      import javax.servlet.http.HttpServletRequest;
      import javax.servlet.http.HttpServletResponse;
      import javax.servlet.http.HttpSession;

      import com.ma.mhe.Mhe_Servlet;
      import com.ma.mhe.PageFlow;
      import com.ma.mhe.log.handler。*;

      public class Lo_Servlet extends Mhe_Servlet {


      private String _module =lo public void init(){}

      public void doPost (
      javax.servlet.http.HttpServletRequest请求,
      javax.servlet.http.HttpServletResponse响应)
      throws javax.servlet.ServletException,java.io.IOException {
      doProcess(请求,响应);
      }

      public void doGet(
      javax.servlet.http.HttpServletRequest request,
      javax.servlet.http.HttpServletResponse response)
      throws javax.servlet.ServletException,java.io.IOException {
      doProcess(request,response);

      public void doProcess(
      javax.servlet.http.HttpServletRequest请求,
      javax.servlet.http.HttpServletResponse响应)
      throws javax.servlet.ServletException,java.io. IOException {
      HttpSession session = request.getSession();
      int val = setTask(session,request);

      switch(val){

      // FILTER PAGE
      case 1:doFilRep(request,response); break;
      case 2:doFilFil(request,response); break;
      case 3:doFilDis(request,response); break;
      case 4:doFilDef(request,response); break;

      // DISPLAY PAGE
      case 5:doDisRep(request,response); break;
      case 6:doDisFil(request,response); break;
      case 7:doDisDis(request,response); break;

      private void doDisDis(HttpServletRequest request,HttpServletResponse response){

      Lo_DisplayHandler display = null;
      try {
      display = new Lo_DisplayHandler(request,response);

      display.lastPage();
      } catch(Exception e){
      } finally {
      display = null;
      }


      }

      // web .xml

      http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd>
      MHE

       < servlet> 
      < servlet-name> mvc-dispatcher< / servlet-name>
      < servlet-class> org.springframework.web .servlet.DispatcherServlet< / servlet-class>
      < load-on-startup> 1< / load-on-startup>
      < / servlet>

      & servlet-mapping>
      < servlet-name> mvc-dispatcher< / servlet-name>
      < url-pattern> /< / url-pattern>
      < / servlet-映射>

      < listener>
      < listener-class> org.springframework.web.context.ContextLoaderListener< / listener-class>
      < / listener>

      < servlet>
      < servlet-name> myservice< / servlet-nam e基
      < servlet-class> org.springframework.ws.transport.http.MessageDispatcherServlet< / servlet-class>
      < init-param>
      < param-name> contextConfigLocation< / param-name>
      < param-value> /WEB-INF/mvc-dispatcher-servlet.xml< / param-value>
      < / init-param>
      < / servlet>

      < servlet>
      < description>
      < / description>
      < display-name> Lo_Servlet< / display-name>
      < servlet-name> Lo_Servlet< / servlet-name>
      < servlet-class> com.ma.mhe.log.Lo_Servlet< / servlet-class>

      < / servlet>
      ...其他servlet配置如下


      解决方案

        private void doDisDis(HttpServletRequest request,HttpServletResponse response){
      Lo_DisplayHandler display = null;
      try {
      display = new Lo_DisplayHandler(request,response);
      display.lastPage();
      } catch(Exception e){
      } finally {
      display = null;
      }
      }

      以上代码正在创建新$实例c $ c> Lo_DisplayHandler 类。这些实例不是由Spring管理的,所以基本上这里的$ code> @Autowired 是没用的。 Spring只会将依赖注入到它知道的bean中。假设您正在使用 ContextLoaderListener 加载弹簧配置,您可以使用 WebApplicationContextUtils 来获取 ApplicationContext 。你可以使用它来获取你想要的bean。

        private void doDisDis(HttpServletRequest request,HttpServletResponse response){
      Lo_DisplayHandler display = null;
      try {
      ApplicationContext context = WebApplicationContextUtils.getRequiredWebApplicationContext(getServletContext());
      display = context.getBean(Lo_DisplayHandler.class,request,response);
      display.lastPage();
      } catch(Exception e){
      } finally {
      display = null;
      }
      }

      为了使这项工作,你必须让你的 Lo_DisplayHandler 一个原型bean,这意味着每次执行一个 getBean 调用完成一个新的实例被创建。为此,将 @Scope 注释添加到课程中。

        @Component 
      @Scope(prototype)
      public class Lo_DisplayHandler扩展Lo_Handler {...}

      最后一个注释,而不是每次需要一个 ApplicationContext 的查找时,您可能希望在 init中执行一次方法,并将其存储为实例变量。为您节省一行代码和一些性能。


      I read a lot in this forum about similiar problems happening when trying to Autowire a pojo and usually the answer to fix is related to component-scan or @Component/@Controller. But in my case I manage to autowire my pojo (Mas60010) but I can not autowire RestTemplate or ObjectMapper and possibly any other object from a package that I didn't code.

      To make simple, I just mention RestTemplate. What I am doing wrong? I guess the problem is either with libraries or configuration. Note: please, don't point this question as duplicate only by showing a question that is related to his own pojo. You can see that it is not my question because I am able to manage this. The problem is with classes inside jars included in my project.

      package com.ma.mhe.log.handler;
      
      import com.fasterxml.jackson.databind.ObjectMapper;
      import org.springframework.web.client.RestTemplate;
      
      @Component
      public class Lo_DisplayHandler extends Lo_Handler {
      
             @Autowired private Mas60010 _mas60010; //this work perfectly
             @Autowired private RestTemplate restTemplate; //this always cause nullPointException
      

      mvc-dispatcher-servlet.xml

      <context:annotation-config />
      <mvc:annotation-driven />
      <context:component-scan base-package="com.ma.mhe.log.handle, com.ma.mhe.log.domain" />
      <context:property-placeholder location="classpath:restServices.properties"/>
      
      <mvc:resources mapping="/**" location="/" />
      
      <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
          <property name="prefix">
              <value>/WEB-INF/pages/</value>
          </property>
          <property name="suffix">
              <value>.jsp</value>
          </property>
      </bean>
      
      <bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter">
          <property name="messageConverters">
              <list>
                  <ref bean="jsonMessageConverter"/>
              </list>
          </property>
      </bean>
      
      <bean id="jsonMessageConverter" class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">
      </bean>
      
      <!-- I was expecting this line to be enouth -->   
      <bean id="restTemplate" class="org.springframework.web.client.RestTemplate">
      </bean>
      

      //Pojo - I can autowire it

      package com.ma.log.domain;
      
      import org.springframework.stereotype.Service;
      
      @Service
      public class Mas60010 {
      

      All libraries

      • "validation-api-1.0.0.GA.jar"
      • "aopalliance-1.0.jar"
      • "commons-logging-1.1.1.jar"
      • "db2java.zip"
      • "hibernate-validator-4.1.0.Final.jar"
      • "hibernate-validator-annotation-processor-4.1.0.Final.jar"
      • "jackson-annotations-2.2.3.jar"
      • "jackson-core-2.2.3.jar"
      • "jackson-databind-2.2.3.jar"
      • "slf4j-api-1.7.5.jar"
      • "spring-aop-4.1.2.RELEASE.jar"
      • "spring-beans-4.1.2.RELEASE.jar"
      • "spring-context-4.1.2.RELEASE.jar"
      • "spring-context-support-4.1.2.RELEASE.jar"
      • "spring-core-4.1.2.RELEASE.jar"
      • "spring-expression-4.1.2.RELEASE.jar"
      • "spring-web-4.1.2.RELEASE.jar"
      • "spring-webmvc-4.1.2.RELEASE.jar"
      • "upload.jar"

      //StackTrace

      [12/17/14 10:38:54:243 CST] 00000033 SystemErr                                                    R        at com.ma.mhe.log.handler.Lo_DisplayHandler.lastPage(Lo_DisplayHandler.java:181)
      [12/17/14 10:38:54:246 CST] 00000033 SystemErr                                                    R        at com.ma.mhe.log.Lo_Servlet.doDisDis(Lo_Servlet.java:164)
      [12/17/14 10:38:54:248 CST] 00000033 SystemErr                                                    R        at com.ma.mhe.log.Lo_Servlet.doProcess(Lo_Servlet.java:51)
      [12/17/14 10:38:54:250 CST] 00000033 SystemErr                                                    R        at com.ma.mhe.log.Lo_Servlet.doPost(Lo_Servlet.java:24)
      [12/17/14 10:38:54:253 CST] 00000033 SystemErr                                                    R        at javax.servlet.http.HttpServlet.service(HttpServlet.java:595)
      [12/17/14 10:38:54:255 CST] 00000033 SystemErr                                                    R        at javax.servlet.http.HttpServlet.service(HttpServlet.java:668)
      [12/17/14 10:38:54:257 CST] 00000033 SystemErr                                                    R        at com.ibm.ws.webcontainer.servlet.ServletWrapper.service(ServletWrapper.java:1274)
      [12/17/14 10:38:54:260 CST] 00000033 SystemErr                                                    R        at com.ibm.ws.webcontainer.servlet.ServletWrapper.handleRequest(ServletWrapper.java:767)
      [12/17/14 10:38:54:261 CST] 00000033 SystemErr                                                    R        at com.ibm.ws.webcontainer.servlet.ServletWrapper.handleRequest(ServletWrapper.java:469)
      [12/17/14 10:38:54:262 CST] 00000033 SystemErr                                                    R        at com.ibm.ws.webcontainer.filter.WebAppFilterManager.invokeFilters(WebAppFilterManager.java:1060)
      [12/17/14 10:38:54:263 CST] 00000033 SystemErr                                                    R        at com.ibm.ws.webcontainer.webapp.WebAppRequestDispatcher.dispatch(WebAppRequestDispatcher.java:1377)
      [12/17/14 10:38:54:265 CST] 00000033 SystemErr                                                    R        at com.ibm.ws.webcontainer.webapp.WebAppRequestDispatcher.forward(WebAppRequestDispatcher.java:185)
      [12/17/14 10:38:54:266 CST] 00000033 SystemErr                                                    R        at com.ma.mhe.Mhe_ControllerServlet.doProcess(Mhe_ControllerServlet.java:83)
      [12/17/14 10:38:54:267 CST] 00000033 SystemErr                                                    R        at com.ma.mhe.Mhe_ControllerServlet.doPost(Mhe_ControllerServlet.java:32)
      [12/17/14 10:38:54:268 CST] 00000033 SystemErr                                                    R        at javax.servlet.http.HttpServlet.service(HttpServlet.java:595)
      [12/17/14 10:38:54:269 CST] 00000033 SystemErr                                                    R        at javax.servlet.http.HttpServlet.service(HttpServlet.java:668)
      [12/17/14 10:38:54:270 CST] 00000033 SystemErr                                                    R        at com.ibm.ws.webcontainer.servlet.ServletWrapper.service(ServletWrapper.java:1274)
      [12/17/14 10:38:54:271 CST] 00000033 SystemErr                                                    R        at com.ibm.ws.webcontainer.servlet.ServletWrapper.handleRequest(ServletWrapper.java:767)
      [12/17/14 10:38:54:272 CST] 00000033 SystemErr                                                    R        at com.ibm.ws.webcontainer.servlet.ServletWrapper.handleRequest(ServletWrapper.java:469)
      [12/17/14 10:38:54:273 CST] 00000033 SystemErr                                                    R        at com.ibm.ws.webcontainer.filter.WebAppFilterManager.invokeFilters(WebAppFilterManager.java:1060)
      [12/17/14 10:38:54:275 CST] 00000033 SystemErr                                                    R        at com.ibm.ws.webcontainer.servlet.CacheServletWrapper.handleRequest(CacheServletWrapper.java:81)
      [12/17/14 10:38:54:276 CST] 00000033 SystemErr                                                    R        at com.ibm.ws.webcontainer.WebContainer.handleRequest(WebContainer.java:885)
      [12/17/14 10:38:54:277 CST] 00000033 SystemErr                                                    R        at com.ibm.ws.webcontainer.osgi.DynamicVirtualHost$2.run(DynamicVirtualHost.java:266)
      [12/17/14 10:38:54:277 CST] 00000033 SystemErr                                                    R        at com.ibm.ws.http.dispatcher.internal.channel.HttpDispatcherLink$TaskWrapper.run(HttpDispatcherLink.java:776)
      [12/17/14 10:38:54:278 CST] 00000033 SystemErr                                                    R        at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:895)
      [12/17/14 10:38:54:279 CST] 00000033 SystemErr                                                    R        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:918)
      [12/17/14 10:38:54:280 CST] 00000033 SystemErr                                                    R        at java.lang.Thread.run(Thread.java:662)
      

      IBM WebSphere Liberty Profile enabled features

      <featureManager>
              <feature>jsp-2.2</feature>
              <feature>localConnector-1.0</feature>
              <feature>jdbc-4.0</feature>
              <feature>jaxrs-1.1</feature>
              <feature>json-1.0</feature>
              <feature>cdi-1.0</feature>
              <feature>managedBeans-1.0</feature>
              <feature>beanValidation-1.0</feature>
      </featureManager>  
      

      //class Lo_DisplayHandler

      @Component
      public class Lo_DisplayHandler extends Lo_Handler {
      
             public Lo_DisplayHandler() {
                    super();
             }
      
             @Autowired
             private Mas60010 _mas60010;
             @Autowired private RestTemplate restTemplate;
      
      
             public Lo_DisplayHandler(HttpServletRequest request,HttpServletResponse response) {
                    super();
      
                    this.request  = request;
                    this.response = response;
             }
      
      
      
             public void lastPage() {
                    //RestTemplate restTemplate = new RestTemplate(); //if I uncomment this line and comment the @Autowired it will work
                    ObjectMapper mapper = new ObjectMapper();
                    try{
      
      
                           myPojoParameters...       
      
                           //the next line rises nullPointExcepetion if I choose Autowired instead of new RestTemplate()
                           LogDisplay _l = restTemplate.postForObject(myServiceUrl,myPojoParameters, LogDisplay.class);
                           Lo_DisplayRecord lo_DisplayRecord = new Lo_DisplayRecord();
      
                           ArrayList<Lo_DisplayRecord> displayValues = new ArrayList<Lo_DisplayRecord>();
      
                           for(int i = 0; i < _l.getDisplayValues().size(); i++){
                                 lo_DisplayRecord = mapper.convertValue(_l.getDisplayValues().get(i), Lo_DisplayRecord.class);
                                 displayValues.add(lo_DisplayRecord);
                           }
      
                           Some not relevant operations...                
                    }catch(Exception e){
                           e.printStackTrace();   
      

      //Lo_Servlet

      package com.ma.mhe.log;
      
      import java.io.IOException;
      import javax.servlet.ServletException;
      import javax.servlet.http.HttpServletRequest;
      import javax.servlet.http.HttpServletResponse;
      import javax.servlet.http.HttpSession;
      
      import com.ma.mhe.Mhe_Servlet;
      import com.ma.mhe.PageFlow;
      import com.ma.mhe.log.handler.*;
      
      public class Lo_Servlet extends Mhe_Servlet {
      
      
                      private String _module = "lo       public void init(){}
      
                      public void doPost(
                                      javax.servlet.http.HttpServletRequest request,
                                      javax.servlet.http.HttpServletResponse response)
                                      throws javax.servlet.ServletException, java.io.IOException {
                                      doProcess(request,response);                                                 
                      }
      
                      public void doGet(
                                      javax.servlet.http.HttpServletRequest request,
                                      javax.servlet.http.HttpServletResponse response)
                                      throws javax.servlet.ServletException, java.io.IOException {
                                      doProcess(request,response); 
                      }
                      public void doProcess(
                                      javax.servlet.http.HttpServletRequest request,
                                      javax.servlet.http.HttpServletResponse response)
                                      throws javax.servlet.ServletException, java.io.IOException {
                                      HttpSession session = request.getSession();
                                      int val = setTask(session,request);
      
                                      switch(val){
      
                                      //FILTER PAGE
                                      case 1:doFilRep(request,response);break;                                                                                                                                                         
                                      case 2:doFilFil(request,response);break;                            
                                      case 3:doFilDis(request,response);break;           
                                      case 4:doFilDef(request,response);break;
      
                                      //DISPLAY PAGE
                                      case 5:doDisRep(request,response);break;                                                                                                                                                        
                                      case 6:doDisFil(request,response);break;           
                                      case 7:doDisDis(request,response);break;
      
             private void doDisDis(HttpServletRequest request,HttpServletResponse response){
      
                    Lo_DisplayHandler display = null;
                    try{
                           display = new Lo_DisplayHandler(request,response);
      
                           display.lastPage();
                    }catch(Exception e){
                                         }finally{
                           display = null;
                    }
      
      
             }
      

      //web.xml http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"> MHE

             <servlet>
                    <servlet-name>mvc-dispatcher</servlet-name>
                    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
                    <load-on-startup>1</load-on-startup>
             </servlet>
      
             <servlet-mapping>
                    <servlet-name>mvc-dispatcher</servlet-name>
                    <url-pattern>/</url-pattern>
             </servlet-mapping>
      
             <listener>
                    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
             </listener>
      
          <servlet>
              <servlet-name>myservice</servlet-name>
              <servlet-class>org.springframework.ws.transport.http.MessageDispatcherServlet</servlet-class>
              <init-param>
                  <param-name>contextConfigLocation</param-name>
                           <param-value>/WEB-INF/mvc-dispatcher-servlet.xml</param-value>
              </init-param>
          </servlet>      
      
             <servlet>
                    <description>
                    </description>
                    <display-name>Lo_Servlet</display-name>
                    <servlet-name>Lo_Servlet</servlet-name>
                    <servlet-class>com.ma.mhe.log.Lo_Servlet</servlet-class>
      
             </servlet>
      ... others servlets configuration like this
      

      解决方案

      private void doDisDis(HttpServletRequest request,HttpServletResponse response){
          Lo_DisplayHandler display = null;
          try {
              display = new Lo_DisplayHandler(request,response);
              display.lastPage();
          }catch(Exception e){
          }finally{
              display = null;
          }
      }
      

      The code above is creating new instances of the Lo_DisplayHandler class. Those instances aren't managed by Spring, so basically the @Autowired is pretty useless here. Spring will only do dependency injection into beans it knows.

      Assuming that you are using the ContextLoaderListener to load the spring configuration you can use the WebApplicationContextUtils to get the ApplicationContext. You can use this to get the beans you want.

      private void doDisDis(HttpServletRequest request,HttpServletResponse response){
          Lo_DisplayHandler display = null;
          try {
              ApplicationContext context = WebApplicationContextUtils.getRequiredWebApplicationContext(getServletContext());          
              display = context.getBean(Lo_DisplayHandler.class, request, response);
              display.lastPage();
          }catch(Exception e){
          }finally{
              display = null;
          }
      }
      

      To make this work you have to make your Lo_DisplayHandler a prototype bean, this means each time a getBean call is done a new instance is created. For this add the @Scope annotation to the class.

      @Component
      @Scope("prototype")
      public class Lo_DisplayHandler extends Lo_Handler { ... }
      

      A final note instead of doing a lookup for the ApplicationContext each time you need one, you might want to do it once in the init method of the servlet and store it as an instance variable. Saves you a line of code and some performance.

      这篇关于为什么我可以自动连线或注入pojo,但是我无法自动连线或注入RestTemplate的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆