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到静态变量去了。

  • 相关阅读:
    MYSQL新特性secure_file_priv对读写文件的影响
    weblogic反序列化漏洞CVE-2018-2628-批量检测脚本
    WebLogic WLS-WebServices组件反序列化漏洞—Linux可执行反弹一句话版本
    攻击溯源_一次断网事件的分析
    建立加密socks5转发的两种方法
    【原创】Flash XSS 挖掘
    【转载】SQL的注入类型
    【原创】批处理文本
    【转载】nmap 官方指南
    【转载】对抗 DDoS 攻击的 15 个方法
  • 原文地址:https://www.cnblogs.com/xunol/p/3198008.html
Copyright © 2011-2022 走看看