在项目中需要启动程序时,要将数据库的用户信息表加载到内存中,找到一下几种方式。
1、实现ApplicationListener接口,重写onApplicationEvent方法,可以在项目启动的时候执行该方法。
@Component("userInit") public class UserInit implements ApplicationListener { public static Map<String,User> map=new HashMap<String, User>(); public static Map<String, User> getMap() { return map; } public static void setMap(Map<String, User> map) { UserInit.map = map; } private HibernateTemplate hibernateTemplate; public HibernateTemplate getHibernateTemplate() { return hibernateTemplate; } @Resource public void setHibernateTemplate(HibernateTemplate hibernateTemplate) { this.hibernateTemplate = hibernateTemplate; } @Override public void onApplicationEvent(ApplicationEvent arg0) { System.out.println("-------------------加载"); List<User> list=hibernateTemplate.find("from User"); for(User s:list){ map.put(s.getUserName()+s.getPassword(), s); } System.out.println(map); } }
该种方法实现比较简单,但是可能会在项目中多次执行,因为并没有规定监听。
如果有个类studentEvent继承了ApplicationEvent,那么要针对这个类进行监听
public void onApplicationEvent(ApplicationEvent _event) { if (!(_event instanceof StudentEvent)) { return; } ... }
2、实现InitializingBean接口,重写方法afterPropertiesSet()方法,可以在项目启动时进行加载
@Component("userInit") public class UserInit implements InitializingBean { public static Map<String,User> map=new HashMap<String, User>(); public static Map<String, User> getMap() { return map; } public static void setMap(Map<String, User> map) { UserInit.map = map; } private HibernateTemplate hibernateTemplate; public HibernateTemplate getHibernateTemplate() { return hibernateTemplate; } @Resource public void setHibernateTemplate(HibernateTemplate hibernateTemplate) { this.hibernateTemplate = hibernateTemplate; } @Override public void afterPropertiesSet() throws Exception { System.out.println("-------------------加载"); List<User> list=hibernateTemplate.find("from User"); for(User s:list){ map.put(s.getUserName()+s.getPassword(), s); } System.out.println(map); } }
这种方式只加载一次,比较方便