不使用@Autowire的Spring+Spring MVC依赖项注入
我正在使用Spring和SpringMVC构建一个应用程序。对我来说,使用@Autowired不是一个选项,而是一个要求 我构建了一个web.xml文件,如:不使用@Autowire的Spring+Spring MVC依赖项注入,spring,spring-mvc,dependency-injection,Spring,Spring Mvc,Dependency Injection,我正在使用Spring和SpringMVC构建一个应用程序。对我来说,使用@Autowired不是一个选项,而是一个要求 我构建了一个web.xml文件,如: <!-- Spring context --> <context-param> <param-name>contextConfigLocation</param-name> <param-value>/WEB-INF/applicationContext.xml</
<!-- Spring context -->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/applicationContext.xml</param-value>
</context-param>
<!-- Creates the Spring Container shared by all Servlets and Filters -->
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<!-- Spring MVC -->
<servlet>
<servlet-name>mvc-dispatcher</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>namespace</param-name>
<param-value>mvc-dispatcher-context</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>mvc-dispatcher</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
我想在其中注入applicationContext.xml文件中定义的一个服务。
我已经尝试了几种方法,但无法使其正常工作,在控制器内使用我的服务时,总是会出现NullPointerException
有没有办法在这个mvc servlet中使用applicationContext.xml中定义的bean
[更新]
如果我在servlet中定义了所有applicatonContext,我就无法让它工作。是否有任何方法可以使servlet上下文成为应用程序上下文的子级,以便能够使用应用程序上下文bean?应用程序上下文已经是父级,因此在其中定义的bean可用于在其子级中定义的bean。但是,如果需要,您可以在应用程序上下文中定义这两个。 问题可能是您如何尝试注入服务 如果将@Autowired添加到您的服务中,它将起作用,因为该bean在您的控制器中可用,但如果您不想使用注释,则需要显式地在xml上下文中创建并注入bean。 首先,您需要在控制器中添加一个setter:
public void setOneService(OneService oneService) {
this.oneService = oneService;
}
然后在应用程序上下文中,您将执行以下操作:
<bean id="mainController" class="com.package.controller.MainController">
<property name="oneService" ref="oneService" />
</bean>
<bean id="oneService" class="com.package.service.OneService">
</bean>
您仍然可以这样做,并将服务声明保留在应用程序上下文中,将控制器保留在servlet上下文中 这是一项要求吗?如果您使用的是@Controller,那么您已经使用了特定于Spring的注释,但当然@Inject始终是一个可接受的替代方案。我可以在不使用注释的情况下执行此操作吗?理论上是的,但您也可以用C编写应用程序。注释是Web开发中的最佳实践,有充分的理由。我知道这是最佳实践,但使用注释并不依赖于我……您需要在控制器中为您的服务定义getter/setter。若bean被正确定义,那个么Setter应该用于连接。我也不明白为什么不应该使用@Autowire?去@Resource然后。。。
public void setOneService(OneService oneService) {
this.oneService = oneService;
}
<bean id="mainController" class="com.package.controller.MainController">
<property name="oneService" ref="oneService" />
</bean>
<bean id="oneService" class="com.package.service.OneService">
</bean>