我正在使用Spring和Spring MVC构建应用程序。对于我来说,使用@Autowired不是一个选项(是一项要求)。未使用@Autowire的Spring + Spring MVC依赖注入
我建立一个像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>
所以我加载Spring上下文和Spring MVC的Servlet。
我的MVC-调度-context.xml文件看起来像:
<beans ...>
<mvc:annotation-driven />
<context:component-scan base-package="com.pacage.controller"/>
<mvc:resources mapping="/resources/**" location="/WEB-INF/static/" />
<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>
</beans>
所以我可以在我的控制器使用注解@Controller ...
而且在我的applicationContext.xml我有我的春天豆类定义,比如我在这种情况下,服务“OneService.java”
我有一个控制器:
@Controller
@RequestMapping("/main")
public class MainController {
private OneService oneService;
//getters and setters
...
}
我想要在applicationContext.xml文件中定义注入OneService的位置。 我尝试了几种方法,但我无法得到它的工作,总是在控制器内使用我的服务时得到一个NullPointerException。
有没有什么方法可以使用此mvc servlet中的applicationContext.xml中定义的bean?
谢谢你们所有的时间!
[更新]
如果我定义我的servlet里面我所有的applicatonContext我不能让它工作。有没有什么办法让servlet上下文成为应用程序连接的子节点,只是为了能够使用应用程序上下文bean?
感谢
“是要求”吗?如果您使用的是@ @ Controller,那么您已经使用了特定于Spring的注释,但是@ @ Inject'当然是一个可以接受的选择。 – chrylis 2014-10-08 14:41:44
我可以不使用注释来做到这一点吗? – 2014-10-08 14:45:18
理论上是的,但你也可以用C编写应用程序。注释是Web开发中的最佳实践,并且有很好的理由。 – chrylis 2014-10-08 14:49:36