Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/spring-mvc/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
不使用@Autowire的Spring+Spring MVC依赖项注入_Spring_Spring Mvc_Dependency Injection - Fatal编程技术网

不使用@Autowire的Spring+Spring MVC依赖项注入

不使用@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和SpringMVC构建一个应用程序。对我来说,使用@Autowired不是一个选项,而是一个要求

我构建了一个web.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>