动态代理之CGLIB
来源:互联网 发布:张佳玮 知乎 编辑:程序博客网 时间:2024/06/16 02:34
CGLIB的原理:运行时动态的生成一个被代理类的子类(通过ASM字节码处理框架实现),子类重写了被代理类中所有非final的方法。在子类中采用方法拦截的技术拦截所有父类方法的调用,顺势植入横切逻辑。
好处:不用再像使用Java动态代理那样去实现特定的接口,一个普通的Java类就可以了
(1)LogAround.java ,负责输出日志信息,实现了接口MethodInterceptor,重写了invoke()方法
public class LogAround implements MethodInterceptor{ Logger logger=Logger.getLogger(this.getClass().getName()); @Override public Object invoke(MethodInvocation mi) throws Throwable { // TODO Auto-generated method stub logger.log(Level.INFO, mi.getArguments()[0]+" 开始..."); //通过proceed方法执行被调用的方法 Object result=mi.proceed(); logger.log(Level.INFO, mi.getArguments()[0]+" 结束..."); //被调用方法的返回值 return result; }}
(2)配置文件,主要设定ProxyFactoryBean的proxyTargetClass属性,属性值设为true
<bean id="log" class="CGLIB.LogAround"></bean><bean id="timeBook" class="spring.aop.TimeBook"></bean><bean id="logProxy" class="org.springframework.aop.framework.ProxyFactoryBean"> <property name="proxyTargetClass"> <value>true</value> </property> <property name="target"> <ref bean="timeBook"/> </property> <property name="interceptorNames"> <list> <value>log</value> </list> </property></bean>
(3)测试
public class Test { public static void main(String[] args) { ApplicationContext context = new FileSystemXmlApplicationContext( "classpath:cglib-config.xml"); TimeBook timeProxy = (TimeBook) context .getBean("logProxy"); timeProxy.doAuditing("CSDN"); }}
运行结果
0 0
- 动态代理之cglib
- 动态代理之CGLIB
- 动态代理之CGLib
- 动态代理之cglib
- 动态代理之cglib代理
- Java动态代理之CGLIB
- 动态代理之cglib实现
- Java动态代理之CGLIB
- Java动态代理之cglib
- 代理模式之cglib动态代理
- 代理模式之cglib动态代理
- 代理模式之cglib动态代理
- java之架构基础-动态代理&cglib
- (五)sping之CGLIB动态代理
- java之架构基础-动态代理&cglib
- java之架构基础-动态代理&cglib
- 动态代理之JDK代理与CGlib代理
- Spirng之静态代理、动态代理、以及cglib代理
- Android"挂逼"修炼之行---防自动抢红包外挂原理解析
- 适配器模式
- 我的科研生活2017-2-5
- Android 中 Bitmap 和 Drawable
- 2.(初级)CSS3选择符
- 动态代理之CGLIB
- 新浪微博第三方登录后模拟发表微博
- ueditor富文本编辑器的使用
- 观察者模式
- SecureCRT中文乱码解决方法
- Caused by: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Unknown column 'XX' in
- css3 2d转换3d转换以及动画的知识点汇总_1
- 实体类里面过滤掉不是服务器返回的字段
- DOM碎片化