在網上找到一個類似的問題,稍做修改
解決方案:給web容器添加一個Listener類,在容器啟動的時候執行Listener的“初始化”方法,在這個初始化方法中執行查詢數據庫的所有操作,然后將數據庫中的信息緩存起來
問題:上面的方法很好,但問題是如何去查詢數據庫,由於使用了spring的IOC特性,查詢數據庫的service控制dao層,dao層訪問數據庫,而Listener類只是在系統啟動的時候會執行初始化方法,但是“service”對象沒有被spring管理,也就是說沒有service對象訪問數據庫,只能使用jdbc的方式連接,這個很顯然不符合MVC開發的特性。那么如何才能在啟動web容器的時候利用spring的IOC特性呢?
解決方法:spring給出的解決方案——寫一個類,實現InitializingBean接口,然后交由spring容器管理
public class InitDataListener implements InitializingBean, ServletContextAware {
@Resource
private AttriService attriService;
@Override
public void setServletContext(ServletContext arg0) {
List<Attri> attriLst = attriService.getAttriLst();
arg0.setAttribute("attriLst",
attriLst);
ServletContext也是和session一樣像一張表,分為屬性、值
添加屬性:setAttribute(String name,Object obj);
得到值:getAttribute(String name);
刪除屬性:removeAttribute(String name);
生命周期
ServletContext中的屬性的生命周期從創建開始,到服務器關閉而結束
}
@Override
public void afterPropertiesSet() throws Exception {
// 在這個方法里面寫 初始化的數據也可以。
}
}
配置文件里寫上這個
<!-- spring系統啟動以后,會先加載該類 -->
<bean class="你的包路徑.InitDataListener">
</bean>
