加载
2015-08-27 22:17
357 查看
场景描述:
解决方案:
有时我们需要在应用启动时,加载某些不常变的数据到缓存中,避免每次请求时查询数据库或其它数据源,以提高性能(准备连接,建立连接,关闭连接,减少数据读取的IO数).如果应用中刚好用到spring框架,正好可以用spring的机制实现这个功能
解决方案:
1:写一个类,实现BeanPostProcessor接口,这个接口有两个方法。 (1):postProcessBeforeInitialization方法,在spring中定义的bean初始化前调用这个方法 (2):postProcessAfterInitialization方法,在spring中定义的bean初始化后调用这个方法 例子代码:
public class CacheBeanPostProcessor implements BeanPostProcessor { @Override public Object postProcessAfterInitialization(Object obj, String arg1) throws BeansException { try { if(obj instanceof ColumnService) { ((ColumnService)obj).getColumnList();//加载栏目数据 }else if(obj instanceof TradeServiceImpl){ ((TradeServiceImpl)obj).getTradeList();//加载行业数据 } } catch (Exception e) { e.printStackTrace(); } return obj; } @Override public Object postProcessBeforeInitialization(Object arg0, String arg1) throws BeansException { // TODO Auto-generated method stub return arg0; } }
2:在spring的xml文件中,添加 <!-- 初始缓存数据,初始化spring中定义的bean的前后都会用此实现类 --> <bean id="cacheBeanPostProcessor" class="com.guagua.cache.CacheBeanPostProcessor"/> 3:在加载数据后,数据存在什么地方,由你来定,我这个例子是放到了一个“静态变量中”
@Service("columnService") public class ColumnServiceImpl implements ColumnService { public static List<Column> columnList = new ArrayList<Column>(); @Autowired private ColumnDao columnDao; public void setColumnDao(ColumnDao columnDao) { this.columnDao = columnDao; } @Override public List<Column> getColumnList() throws Exception { columnList = columnDao.getColumnList(); return columnList; } }
相关文章推荐
- 一个jar包里的网站
- 一个jar包里的网站之文件上传
- 一个jar包里的网站之返回对媒体类型
- spring+html5实现安全传输随机数字密码键盘
- Spring中属性注入详解
- struts2 spring整合fieldError问题
- spring的jdbctemplate的crud的基类dao
- 读取spring配置文件的方法(spring读取资源文件)
- java实现简单美女拼图游戏
- java基本教程之线程休眠 java多线程教程
- JSP开发中在spring mvc项目中实现登录账号单浏览器登录
- 基于Spring框架的Shiro配置方法
- Spring MVC中上传文件实例
- 实例讲解Java的Spring框架中的AOP实现
- 解析Java中如何获取Spring中配置的bean
- Spring的注解配置与XML配置之间的比较
- java Spring整合Freemarker的详细步骤
- Java 二维码,QR码,J4L-QRCode 的资料整理
- java当中的定时器的4种使用方式
- java中 spring 定时任务 实现代码