您的位置:首页 > 编程语言 > Java开发

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

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

Spring配置

<context:component-scan base-package="com.github.weibao.compoment />

然后定义一个类 实现接口 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");
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: