@Autowired 不成功问题
想使用自动装配功能,但是发现没有成功,根本就没有装配。
环境是这样的,
使用SpringMVC,由于使用MyBatis,所以准备Service类里面,自动装配Mapper接口,
结果发现Mapper接口根本没有实例化,也就是根本没有装配成功。
原因,先来看一下配置文件
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>WEB-INF/classes/config/applicationContext.xml</param-value>
</context-param>
<listener>
<listener-class>my.MyContextLoaderListener</listener-class>
</listener>
<servlet>
<servlet-name>dispatcherServlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
</servlet>
<!-- 拦截所有以do结尾的请求 -->
<servlet-mapping>
<servlet-name>dispatcherServlet</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>
</web-app>
由于我的Mapper接口是放在WEB-INF/classes/config/applicationContext.xml里面的,也就是由ContextLoaderListener加载的applicationContext里面。
而我的Service类是放在由DispatcherServlet所加载的applicationContext里面。
所以想在Service类里面自动装配Mapper接口当然不会成功了。因为他们根本就属于不同的applicationContext。
我的解决方法就是把WEB-INF/classes/config/applicationContext.xml里面的配置放到DispatcherServlet的xml配置里面去。
从结构上面说我也不知道是不是最好的。