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

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

1. 实现BeanPostProcessor接口

 @Component
public class LoadDataCache implements BeanPostProcessor { @@Resource
private IDao dao; @Override
public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {
// Bean实例化之前执行
return bean;
} @Override
public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {
// Bean实例化之后执行
List list = dao.findAll();
..... // 做一些事情
return bean;
}
}

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

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

2. 实现ApplicationListener接口

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

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

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

 @Component
public class LoadDataCache { @Resource
private IDao dao; public void init() {
// 在Bean实例化之前执行
List list = dao.findAll();
..... // 做一些事情
}
}

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

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

 @Service("resourceBean")
public class ResourceBean implements ApplicationListener<ApplicationEvent> {
@Resource
private SystemLinkManager systemLinkManager; public ResourceBean() {
} @Bean(name="systemLinkList")
public List<SystemLink> getSystemLinkList() {
return systemLinkManager.findAll(); }
@Bean(name="systemLinkPartnerList")
public List<SystemLink> getSystemLinkPartnerList() {
return systemLinkManager.findPartner();
}
@Bean(name="systemLinkFriendLinkList")
public List<SystemLink> getSystemLinkFriendLinkList() {
return systemLinkManager.findFriendLink();
}
     <bean id="DBResources" class="java.util.LinkedHashMap">
<constructor-arg>
<map>
<entry key="systemLinkList" value-ref="systemLinkList" />
<entry key="systemLinkPartnerList" value-ref="systemLinkPartnerList" />
<entry key="systemLinkFriendLinkList" value-ref="systemLinkFriendLinkList" />
</map>
</constructor-arg>
</bean>

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

Spring启动时加载数据的更多相关文章

  1. Tomcat启动时加载数据到缓存---web.xml中listener加载顺序(优先初始化Spring IOC容器)

    JavaWebSpringTomcatCache  最近用到在Tomcat服务器启动时自动加载数据到缓存,这就需要创建一个自定义的缓存监听器并实现ServletContextListener接口,并且 ...

  2. Tomcat启动时加载数据到缓存---web.xml中listener加载顺序(例如顺序:1、初始化spring容器,2、初始化线程池,3、加载业务代码,将数据库中数据加载到内存中)

    最近公司要做功能迁移,原来的后台使用的Netty,现在要迁移到在uap上,也就是说所有后台的代码不能通过netty写的加载顺序加载了. 问题就来了,怎样让迁移到tomcat的代码按照原来的加载顺序进行 ...

  3. spring启动时加载字典表数据放入map

    import java.util.HashMap; import java.util.List; import org.springframework.beans.factory.annotation ...

  4. Spring 启动时加载资源

    Spring加载资源文件目前了解三种, @PostConstruct在Context加载完成之后加载.在创建各个Bean对象之前加载. 实现ApplicationRunner的run方法,Bean加载 ...

  5. web.xml中配置启动时加载的servlet,load-on-starup

    web.xml中配置启动时加载的servlet,load-on-starup 使用servlet来初始化配置文件数据: 在servlet的配置当中,<load-on-startup>1&l ...

  6. Servlet在启动时加载的tomcat源码(原创)

    tomcat 8.0.36 知识点: 通过配置loadOnStartup可以设置Servlet是否在Tomcat启动时加载,以及按值大小进行有序加载,其最小有效值为0,最大有效值为Integer.MA ...

  7. ElasticSearch 启动时加载 Analyzer 源码分析

    ElasticSearch 启动时加载 Analyzer 源码分析 本文介绍 ElasticSearch启动时如何创建.加载Analyzer,主要的参考资料是Lucene中关于Analyzer官方文档 ...

  8. SpringMvc 系统启动时加载数据到内存中

    SpringMvc 系统启动时加载数据到内存中 学习了:http://blog.csdn.net/newstruts/article/details/18668269 https://www.cnbl ...

  9. js 窗口滚动到一定高度时加载数据

    <script type="text/javascript"> //当窗口滚动到一定高度时 某块页面开始加载数据 window.onload = function() ...

随机推荐

  1. this class is not key value coding-compliant for the key ##

    setValue:forUndefinedKey:]: this class is not key value coding-compliant for the key ## 出现以上错误时很恶心,并 ...

  2. cocos2d-x 2.1.2 bug发现

    1.在做屏蔽触摸时发现 extensions中的CCScrollView类 void CCScrollView::registerWithTouchDispatcher() { CCDirector: ...

  3. HDU 1150 Machine Schedule (最小覆盖,匈牙利算法)

    题意: 有两台不同机器A和B,他们分别拥有各种运行模式1~n和1~m.现有一些job,需要在某模式下才能完成,job1在A和B上需要的工作模式又可能会不一样.两台机器一开始处于0模式,可以切换模式,但 ...

  4. DataTables ajax重新加载数据

    传数据给后台返回数据,最开始的办法是 重新生成一个datatable对象,但是在每次点击刷新时都会有闪动的现象,而且代价很高.理想中应该仅仅更新数据. 最后在文档中查到一个插件fnReloadAjax ...

  5. RTP协议学习大总结从原理到代码

    from:http://wenku.baidu.com/view/aaad3d136edb6f1aff001fa5.html 一.流媒体概念 流媒体包含广义和狭义两种内涵:广义上的流媒体指的是使音频和 ...

  6. 【转载】图论 500题——主要为hdu/poj/zoj

    转自——http://blog.csdn.net/qwe20060514/article/details/8112550 =============================以下是最小生成树+并 ...

  7. hdu 4057(ac自动机+状态压缩dp)

    题意:容易理解... 分析:题目中给的模式串的个数最多为10个,于是想到用状态压缩dp来做,它的状态范围为1-2^9,所以最大为2^10-1,那我们可以用:dp[i][j][k]表示长度为i,在tri ...

  8. Java SE 6 新特性: 对脚本语言的支持

    2006 年底,Sun 公司发布了 Java Standard Edition 6(Java SE 6)的最终正式版,代号 Mustang(野马).跟 Tiger(Java SE 5)相比,Musta ...

  9. Kafka 设计与原理详解

    一.Kafka简介 本文综合了我之前写的kafka相关文章,可作为一个全面了解学习kafka的培训学习资料. 转载请注明出处 : 本文链接 1.1 背景历史 当今社会各种应用系统诸如商业.社交.搜索. ...

  10. bzoj3884: 上帝与集合的正确用法 欧拉降幂公式

    欧拉降幂公式:http://blog.csdn.net/acdreamers/article/details/8236942 糖教题解处:http://blog.csdn.net/skywalkert ...