springmvc在啟動工程的時候就訪問數據庫,加載一些共同的數據


在網上找到一個類似的問題,稍做修改

解決方案:給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>


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM