@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配置里面去。

从结构上面说我也不知道是不是最好的。

posted @ 2011-12-30 10:04  nirvana7  阅读(2307)  评论(0编辑  收藏  举报