zoukankan      html  css  js  c++  java
  • 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到静态变量去了。

  • 相关阅读:
    JVM调优总结(四)-垃圾回收面临的问题
    JVM调优总结(三)-基本垃圾回收算法
    JVM调优总结(二)-一些概念
    Java8 Lambda表达式教程
    Java8 Lambda表达式教程
    Java8 Lambda表达式教程
    JVM调优总结(一)-- 一些概念
    Hibernate 3中如何获得库表所有字段的名称
    easyUI-datagrid带有工具栏和分页器的数据网格
    easyui-tabs
  • 原文地址:https://www.cnblogs.com/xunol/p/3198008.html
Copyright © 2011-2022 走看看