问题描述:在线程中需要调用一个接口,但在接口实现中@Autowired等方式无法创建mapper的bean。本问题基于ssm架构实现.
解决办法
(该方法仅仅是解决,并不是最好的办法):在dao层使用实现接口ApplicationContextAware的方式。具体内容:
import java.util.Locale;
import org.springframework.beans.BeansException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
public class SpringContextUtil implements ApplicationContextAware {
private static ApplicationContext applicationContext=null;
/**(non Javadoc)
* @Title: setApplicationContext
* @Description: spring获取bean工具类
* @param applicationContext
* @throws BeansException
* @see org.springframework.context.ApplicationContextAware#setApplicationContext(org.springframework.context.ApplicationContext)
* <bean id="springContextUtil" class="com.tantela.listener.SpringContextUtil">需要配置
*/
public void setApplicationContext(ApplicationContext context)
throws BeansException {
SpringContextUtil.applicationContext = context;
}
public static ApplicationContext getApplicationContext(){
return applicationContext;
}
public static Object getBean(String name)throws BeansException{
return applicationContext.getBean(name);
}
}
在SpringMVC的配置需要配置指定
<bean id="springContextUtil" class="类所在包路径.SpringContextUtil">需要配置
使用
UserDao userDao=SpringContextUtil.getApplicationContext().getBean(UserDao .class);
userDao.方法