后台读取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去掉。

 

posted @ 2014-06-27 10:57  烂不了的木头  阅读(1108)  评论(0编辑  收藏  举报