標籤:使用 os 檔案 io for 問題
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去掉。