Spring启动时加载数据

程序中也许有会有许多常用的,不会经常更改的数据,我们可以在程序初始化的时候就把他们加载,就不用频繁的加载或者查询。

以下是几个常用的,有COPY收集的,也有自己弄。

1. 实现BeanPostProcessor接口

 1 @Component
 2 public class LoadDataCache implements BeanPostProcessor {
 3 
 4     @@Resource
 5     private IDao dao;
 6 
 7     @Override
 8     public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {
 9         // Bean实例化之前执行
10         return bean;
11     }
12 
13     @Override
14     public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {
15         // Bean实例化之后执行
16         List list = dao.findAll();
17         ..... // 做一些事情
18         return bean;
19     }
20 }

此方法我在用于查询数据库的时候,出现此个实例在依赖Bean之前加载的情况,我就没用这个,而是换成方法2. 实现ApplicationListener接口。

不过这个方法加载文件数据应该就不会有什么错误吧。

2. 实现ApplicationListener接口

 1 @Component
 2 public class LoadDataCache implements ApplicationListener<ApplicationEvent> {
 3 
 4     @Resource
 5     private IDao dao;
 6     
 7     @Override
 8     public void onApplicationEvent(ApplicationEvent arg0) {
 9         // 在spring所有资源(xml和注解)加载注入完毕后执行
10         List list = dao.findAll();
11         ..... // 做一些事情
12     }
13 }

推荐这个方法,如备注所描述,在spring所有资源(xml和注解)加载注入完毕后执行,那么依赖资源就都会先加载。

3. 利用bean便签中的init-method属性

 1 @Component  
 2 public class LoadDataCache {  
 3   
 4     @Resource  
 5     private IDao dao;  
 6       
 7     public void init() {  
 8         // 在Bean实例化之前执行  
 9         List list = dao.findAll();  
10         ..... // 做一些事情  
11     }  
12 }  

这种方法在使用时可能会遇到很多问题,我没使用,不便多说,贴出地址原文。原文地址

4.通过把方法返回值做成Bean注入

 1 @Service("resourceBean")
 2 public class ResourceBean implements ApplicationListener<ApplicationEvent> {
 3     @Resource
 4     private SystemLinkManager systemLinkManager;
 5 
 6     public ResourceBean() {
 7     }
 8 
 9     @Bean(name="systemLinkList")
10     public List<SystemLink> getSystemLinkList() {
11         return systemLinkManager.findAll();
12 
13     }
14     @Bean(name="systemLinkPartnerList")
15     public List<SystemLink> getSystemLinkPartnerList() {
16         return systemLinkManager.findPartner();
17     }
18     @Bean(name="systemLinkFriendLinkList")
19     public List<SystemLink> getSystemLinkFriendLinkList() {
20         return systemLinkManager.findFriendLink();
21     }
22
1     <bean id="DBResources" class="java.util.LinkedHashMap">
2         <constructor-arg>
3             <map>
4                 <entry key="systemLinkList" value-ref="systemLinkList" />
5                 <entry key="systemLinkPartnerList" value-ref="systemLinkPartnerList" />
6                 <entry key="systemLinkFriendLinkList" value-ref="systemLinkFriendLinkList" />
7             </map>
8         </constructor-arg>
9     </bean>

把数据构造成了一个map,后来改成方法一实现了。拿到之后直接put到静态变量去了。

原文地址:https://www.cnblogs.com/xunol/p/3198008.html