zoukankan      html  css  js  c++  java
  • spring 在web容器启动时执行初始化方法

    开发框架:spingMVC+myBatis

    解决方案:给web容器添加一个Listener类,在容器启动的时候执行Listener的“初始化”方法,在这个初始化方法中执行查询数据库的所有操作,然后将数据库中的信息缓存起来

    问题:上面的方法很好,但问题是如何去查询数据库,由于使用了spring的IOC特性,查询数据库的service控制dao层,dao层访问数据库,而Listener类只是在系统启动的时候会执行初始化方法,但是“service”对象没有被spring管理,也就是说没有service对象访问数据库,只能使用jdbc的方式连接,这个很显然不符合MVC开发的特性。那么如何才能在启动web容器的时候利用spring的IOC特性呢?

    解决方法:spring给出的解决方案——写一个类,实现InitializingBean接口,然后交由spring容器管理

    Java代码  收藏代码
    1. public class InitDataListener implements InitializingBean, ServletContextAware{  
    2.   
    3.     private UserService userService;//属性。和配置文件对应property name对应  
    4.     private Logger log = Logger.getLogger(InitDataListener.class);  
    5.       
    6.     public UserService getUserService() {  
    7.         return userService;  
    8.     }  
    9.     public void setUserService(UserService userService) {  
    10.         this.userService = userService;  
    11.     }  
    12.   
    13.     @Override  
    14.     public void afterPropertiesSet() throws Exception {  
    15.         //在这个方法里面写 初始化的数据也可以。  
    16.           
    17.     }  
    18.     @Override  
    19.     public void setServletContext(ServletContext arg0) {  
    20.           
    21.         //userMap容器存放 userList(用户数据)  
    22.         List<User> userList = new ArrayList<User>();   
    23.         try {  
    24.             userList = userService.queryAllUser();  
    25.             Map<String, Object> userMap = CachFactory.getInstance().createCach("userMap");  
    26. //一个工厂模式和单例模式的使用。文档最后有代码  
    27.             for(User user:userList){  
    28.                 userMap.put(user.getUserid(), user);  
    29.             }  
    30.               
    31.         } catch (Exception e) {  
    32.             log.error("queryAllUser error系统初始化查询所有用户出错");  
    33.         }  
    34.           
    35.     System.out.println(userList.size());  
    36.   
    37. }  
    Java代码  收藏代码
    1. <!-- spring系统启动以后,加载该类,查询所有数据    -->  
    2. <bean class="adtec.init.InitDataListener">  
    3.     <property name="userService" ref="userService"></property>  
    4. </bean>  

    备注:userService这个类实际上也是被spring管理了的,他管理的dao层是操作数据库的,这里我就不贴上代码了,只是说明一下这种解决方案和思想。

  • 相关阅读:
    2012搜狗校园招聘笔试题(2)
    T-SQL中只截取日期的日期部分和日期的时间部分
    Delphi XE4 TStringHelper用法详解
    TScreen 类
    TScreen 类
    Delphi中Form的position属性与代码自定义窗体位置
    如何让窗口显示在电脑屏幕中间
    C#中整型数据类型
    C# WinForm开发系列
    SQL中EXCEPT和Not in的区别?
  • 原文地址:https://www.cnblogs.com/jtlgb/p/7280194.html
Copyright © 2011-2022 走看看