后台读取applicationContext.xml引发的奇葩问题

SpringMVC整合ibatis时,写了一个测试方法,运行正常,当运行另一个方法时报找不到对应的路径。此处无法理解,为什么同样规则的请求,第一次能够拦截第二次却提示找不到对应的处理方法。

后来将添加的第二个方法逐一注释掉,才发现在Dao层中读取applicationContext.xml时,为了让dao层的各方法共用一个applicationContext.xml,我将读取它的代码提取了出来,作为成员变量

处理了。后将每个dao方法添加同样的读取代码后,程序正常运行。添加代码如下:

ApplicationContext context=
new ClassPathXmlApplicationContext("applicationContext.xml");
SqlMapClient sqlMapClient=(SqlMapClient) context.getBean("sqlMapClient");

 

猜测原因为:spring配置文件中bean默认为单例模式导致。后续将对该问题进行测试。

 

————————————————————————————————————————————————————————

为解决共用SqlMapClient的问题,我们可以提供一个BaseDao。

public class BaseDao extends SqlMapClientDaoSupport{
@Resource(name="sqlMapClient")
private SqlMapClient sqlMapClient;

@PostConstruct
public void initSqlMapClient(){
super.setSqlMapClient(sqlMapClient);
}
}

dao层继承BaseDao之后,便能使用SqlMapClientDaoSupport提取的静态方法:

getSqlMapClient().queryForObject("user.findById",id);//使用此方法时可将applicationContext.xml中的sqlMapClientTemplate bean去掉。

 

后台读取applicationContext.xml引发的奇葩问题,布布扣,bubuko.com

后台读取applicationContext.xml引发的奇葩问题

上一篇:Tutorial Master 2丨(五)管理引导项的小技巧,提高你的开发效率


下一篇:android检测网络连接状态示例讲解