码迷,mamicode.com
首页 > 编程语言 > 详细

springaop\ cglib\ AspectJ

时间:2019-12-18 19:03:18      阅读:90      评论:0      收藏:0      [点我收藏+]

标签:命名空间   spring容器   service   运行环境   targe   反射   源码   特殊   tps   

元编程 vs 动态代理 vs isa代理

 

springaop的底层实现有两种,一种是jdk的动态代理,另一种是cglib,springaop没有用到aspectj,只是借鉴了它并添加了aspectj风格的注解,使用aspectj必须用到它自己特殊的编译器和运行环境的插件。

 

https://zhidao.baidu.com/question/394893890.html

 

AspectJ是一个代码生成工具,AspectJ语法就是用来定义代码生成规则的语法。表面看AspectJ有点像是基于动态代理或者是反射实现的

https://blog.csdn.net/zhao9tian/article/details/37762389

 

 

通过aop命名空间的<aop:aspectj-autoproxy />声明自动为spring容器中那些配置@aspectJ切面的bean创建代理,织入切面。当然,spring

在内部依旧采用AnnotationAwareAspectJAutoProxyCreator进行自动代理的创建工作,但具体实现的细节已经被<aop:aspectj-autoproxy />隐藏起来了

<aop:aspectj-autoproxy />有一个proxy-target-class属性,默认为false,表示使用jdk动态代理织入增强,当配为<aop:aspectj-autoproxy  poxy-target-class="true"/>时,表示使用CGLib动态代理技术织入增强。不过即使proxy-target-class设置为false,如果目标类没有声明接口,则spring将自动使用CGLib动态代理。

 

https://www.cnblogs.com/zmxie/p/3399629.html

 

从代理对象反编译源码可以知道,代理对象继承于HelloService,拦截器调用intercept()方法,

 

intercept()方法由自定义MyMethodInterceptor实现,所以,最后调用MyMethodInterceptor中

 

的intercept()方法,从而完成了由代理对象访问到目标对象的动态代理实现。

————————————————

版权声明:本文为CSDN博主「街灯下的小草」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。

原文链接:https://blog.csdn.net/yhl_jxy/article/details/80633194

springaop\ cglib\ AspectJ

标签:命名空间   spring容器   service   运行环境   targe   反射   源码   特殊   tps   

原文地址:https://www.cnblogs.com/feng9exe/p/12061465.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!