署理知识
发布时间:2011-06-20 02:10:48 文章来源:www.iduyao.cn 采编人员:星星草
代理知识
Spring AOP的底层就是通过使用JDK动态代理或CGLib动态代理技术为目标Bean织入横切逻辑。在这里,我们对前面两节动态创建代理对象作一个小结。
我们虽然通过PerformanceHandler或CglibProxy实现了性能监视横切逻辑的动态织入,但这种实现方式存在三个明显需要改进的地方:
1)目标类的所有方法都添加了性能监视横切逻辑,而有时,这并不是我们所期望的,我们可能只希望对业务类中的某些特定方法添加横切逻辑;
2)我们通过硬编码的方式指定了织入横切逻辑的织入点,即在目标类业务方法的开始和结束前织入代码;
3)我们手工编写代理实例的创建过程,为不同类创建代理时,需要分别编写相应的创建代码,无法做到通用。
以上三个问题,在AOP中占用重要的地位,因为Spring AOP的主要工作就是围绕以上三点展开:Spring AOP通过Pointcut(切点)指定在哪些类的哪些方法上织入横切逻辑,通过Advice(增强)描述横切逻辑和方法的具体织入点(方法前、方法后、方法的两端等)。此外,Spring通过Advisor(切面)将Pointcut和Advice两者组装起来。有了Advisor的信息,Spring就可以利用JDK或CGLib的动态代理技术采用统一的方式为目标Bean创建织入切面的代理对象了。
JDK动态代理所创建的代理对象,在JDK 1.3下,性能强差人意。虽然在高版本的JDK中,动态代理对象的性能得到了很大的提高,但是有研究表明,CGLib所创建的动态代理对象的性能依旧比JDK的所创建的代理对象的性能高不少(大概10倍)。但CGLib在创建代理对象时所花费的时间却比JDK动态代理多(大概8倍),所以对于singleton的代理对象或者具有实例池的代理,因为无须频繁创建代理对象,所以比较适合用CGLib动态代理技术,反之适合用JDK动态代理技术。值得一提的是,由于CGLib采用动态创建子类的方式生成代理对象,所以不能对目标类中的final方法进行代理。
友情提示:
信息收集于互联网,如果您发现错误或造成侵权,请及时通知本站更正或删除,具体联系方式见页面底部联系我们,谢谢。
其他相似内容:
-
树形控件--zTree 很好很强大
树形控件--zTree 很好很强大:http://www.ztree.me/v3/demo.php#_506...
-
深入理解Lustre文件系统-第1篇 跟踪调试系统
一直以来,Linus Torvalds对内核调试器都秉持着抵触态度,并且摆出了我是bastard我...
-
在OSGi环境下配置hibernate的connection pool
很多人都知道MySQL的默认设置中含有一个connection timeout属性,当一个connection在...
-
Follow Me:深入浅出学习Hibernate三:Session三种状态详解
声明
Session是一个持久化管理器,对数据库进行操作之前,必须先取得...
-
[dika 记录] erlang游戏网关,及一些第三方erlang开源项目的使用
回来学校15天了.毕业周,应酬比较多,但是还是做了一点东西.
记录...
-
从调试角度理解ActionContext、OgnlContext、OgnlValueStack的关系
从调试角度理解ActionContext、OgnlContext、OgnlValueStack...
-
[dika记录] 游戏地图模块 的初步模型
erlang 游戏没有什么开源的,可以借鉴的并不多.可能很多处理得不好.但是也是可以自己尝试以...
-
数据结构-栈和队列
1.栈
1.1 栈的定义
栈是一种特殊的线性表。其特殊性在于限定插入和删除数据元素的操作只能在线性表的一...
-
基于RTP的音视频封装和同步方案设计图案【转载请注明出处】...
-
基于RTP的音视频同步方案设计【转载请注明出处】
注:该文章为上篇图案的同步部分的详述。
网络多媒体流是多种媒体类型在网络环...