实战CGLib系列之proxy篇(四):改进版延迟加载Dispatcher
来源:互联网 发布:2016学python有前途吗 编辑:程序博客网 时间:2024/06/05 03:21
本系列文章均整理自我在先前一家公司的CGLib使用总结和笔记。分享出来,希望对看到的人有所帮助,同时欢迎大家提出宝贵意见。如需转载,请勿修改,且注明作者shensy及出处。
--------------------------------------
实战CGLib系列文章
本篇介绍改进版延迟加载器Dispatcher。
一、作用:
上一篇文章中,介绍了延迟加载器LazyLoader。本篇介绍另一种延迟加载接口Dispatcher。
Dispatcher接口同样继承于Callback,也是一种回调类型。
但是Dispatcher和LazyLoader的区别在于:LazyLoader只在第一次访问延迟加载属性时触发代理类回调方法,而Dispatcher在每次访问延迟加载属性时都会触发代理类回调方法。
二、示例:
与上篇文章相同,先定义一个实体类DispatcherBean,该Bean内有一个需要延迟加载的属性PropertyBean。PropertyBean的代码与上一篇相同,这里只看一下DispatcherBean:
- public class DispatcherBean {
- private String name;
- private String value;
- private PropertyBean propertyBean;
- public DispatcherBean(){
- this.name="DispatcherBean";
- this.value="abc";
- this.propertyBean=createDispatcherBean();
- }
- protected PropertyBean createDispatcherBean(){
- Enhancer enhancer=new Enhancer();
- enhancer.setSuperclass(PropertyBean.class);
- return (PropertyBean)enhancer.create(PropertyBean.class,new ConcreteClassDispatcher());
- }
- //setter/getter
- }
同样对propertybean生成了代理类,回调类ConcreteClassDispatcher实现了Dispatcher接口,如下:
- public class ConcreteClassDispatcher implements Dispatcher{
- public Object loadObject() throws Exception {
- System.out.println("Dispatcher loadObject ...");
- PropertyBean object=new PropertyBean();
- object.setPropertyName("PropertyBeanName!");
- object.setPropertyValue(1);
- return object;
- }
- }
验证延迟加载:
- DispatcherBean dispatcherBean=new DispatcherBean();
- System.out.println(dispatcherBean.getName());
- System.out.println(dispatcherBean.getValue());
- PropertyBean pb=dispatcherBean.getPropertyBean();
- System.out.println(pb.getPropertyName());
- //在每次访问时都要进行回调
- System.out.println(pb.getPropertyValue());
控制台输出:
- DispatcherBean
- abc
- Dispatcher loadObject ...
- PropertyBeanName!
- Dispatcher loadObject ...
- 1
由此可见,每次获取property bean的属性都会自动触发回调方法加载对象。
结束语:
以上就是CGLib中Dispatcher延迟加载的一个示例,本系列下一篇将继续介绍CGLib的强大功能,敬请期待。 0 0
- 实战CGLib系列之proxy篇(四):改进版延迟加载Dispatcher
- 实战CGLib系列之proxy篇(三):延迟加载LazyLoader
- 实战CGLib系列之proxy篇(三):延迟加载LazyLoader
- 实战CGLib系列之proxy篇
- 实战CGLib之延迟加载LazyLoader
- 实战CGLib系列之proxy篇(一):方法拦截MethodInterceptor
- 实战CGLib系列之proxy篇(五):接口生成器InterfaceMaker
- 实战CGLib系列之proxy篇(一):方法拦截MethodInterceptor
- 实战CGLib系列之proxy:方法拦截MethodInterceptor
- 实战CGLib系列之proxy篇(二):回调过滤CallbackFilter
- CGlib之LazyLoader实现延迟加载对象
- 使用CGLIB轻松实现延迟加载(Lazyload)
- 使用CGLIB轻松实现延迟加载(Lazyload)
- 使用CGLIB轻松实现延迟加载(Lazyload)
- 使用CGLIB轻松实现延迟加载(Lazyload)
- 使用CGLIB轻松实现延迟加载(Lazyload)
- 使用CGLIB轻松实现延迟加载(Lazyload)
- 使用CGLIB轻松实现延迟加载(Lazyload)
- VS2010串口通信
- String、StringBuffer与StringBuilder区别
- 实战CGLib系列之proxy篇(三):延迟加载LazyLoader
- 安卓学习笔记:3:AnalogClock和DigitalClock
- node.js 事物处理 mysql
- 实战CGLib系列之proxy篇(四):改进版延迟加载Dispatcher
- vector的用法
- ado.net学习笔记(1)常用代码
- HDU 1059 - Dividing(多重背包)
- 实战CGLib系列之proxy篇(五):接口生成器InterfaceMaker
- Java动态代理与Cglib库
- 设计模式之单例模式
- printf输出格式控制
- 如何用latex写好文章