`
qiuxia812913
  • 浏览: 7995 次
  • 性别: Icon_minigender_2
  • 来自: 成都
社区版块
存档分类
最新评论

利用Spring BeanPostProcessor 初始化时加载数据到缓存

阅读更多
利用Spring BeanPostProcessor 初始化时加载数据到缓存


我们经常会在项目中碰到需要加载一些常量到内存中,以便不比每次需要使用时都去查询数据库, 如,一些国家信息,省份信息,地址信息等 不会变动 或变动很少,但数据量又比较大的数据, 这时我们就需要把这些数据加载进内存,需要使用时直接从内从中取。 下面是代码:

Spring配置

<!-- 自动加载国家信息到 内存 -->
<bean id="pbsTrackManagerPostProcess" class="com.mangocity.vacationhotel.business.action.PBSTrackManagerPostProcessor"/>

<bean id="startOnLoadService" class="com.mangocity.vacationhotel.business.service.impl.StartOnLoadService">
<property name="countryService" ref="countryService"/>
</bean>
然后定义一个类 实现接口 BeanPostProcessor

public class PBSTrackManagerPostProcessor implements BeanPostProcessor {

public Object postProcessAfterInitialization(Object obj, String arg1)
throws BeansException {
if(obj instanceof StartOnLoadService) {
((StartOnLoadService)obj).loadData(); //调用方法加载数据
}
return obj;
}

public Object postProcessBeforeInitialization(Object arg0, String arg1)
throws BeansException {
return arg0;
}

}
再定义一个类(service)在这个类中进行调用DAO查询数据库 ,加载出数据

public class StartOnLoadService {
public static Map<String,List> dictionaryInfoMap = new HashMap<String, List>(); //保存国籍信息
private CountryService countryService; //受Spring 管理的Service 方法 调用Dao取数据

/**
* Spring 容器初始化时加载
*/
public void loadData() {
List optionList = countryService.getAllCountry();
dictionaryInfoMap.put("nationalMap", optionList);
}

public CountryService getCountryService() {
return countryService;
}

public void setCountryService(CountryService countryService) {
this.countryService = countryService;
}

}
就这样在Spring 启动时 数据就会被加载到 上面 StartOnLoadService 中的 dictionaryInfoMap 中。

之后可以通过如下代码获取初始化保存的Map信息

List optionList = StartOnLoadService.dictionaryInfoMap.get("nationalMap");

转载自:小武 2014年06月26日 于 无主题 · 专注开发技术 发表
本文固定链接:http://www.wuzhuti.cn/201426!908!06!093440.html
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics