1. cglib原理-不依赖接口,速度快

使用ASM字节框架动态生成要代理类的子类,子类重写final以外的方法,织入横切逻辑

2. 示例-实现MethodInterceptor

Test.java
public class Test {
public void sayHello(String ss){
System.out.println(ss);
}
}
TargetInterceptor.java
public class TargetInterceptor implements MethodInterceptor {
public Object getInstance(Object source){
Enhancer enhancer = new Enhancer();
//设置父类
enhancer.setSuperclass(source.getClass());
//设置回调方法
enhancer.setCallback(this);
//创建代理对象
return enhancer.create();
} /**
* 重写方法拦截在方法前和方法后加入业务
* Object obj为目标对象
* Method method为目标方法
* Object[] params 为参数,
* MethodProxy proxy CGlib方法代理对象
*/
public Object intercept(Object obj, Method method, Object[] params,
MethodProxy proxy) throws Throwable {
System.out.println("调用前");
Object result = proxy.invokeSuper(obj, params);
System.out.println(" 调用后"+result);
return result;
} public static void main(String[] args) {
Test test = new Test();
Test proxy = (Test)new TargetInterceptor().getInstance(test);
System.out.println("proxy类型:"+proxy.getClass().getName());
proxy.sayHello("zzzzzzz");
}
}

执行结果

proxy类型:test.java.cglibtest.Test$$EnhancerByCGLIB$$6926e63
调用前
zzzzzzz
调用后null

最新文章

  1. Linux下的tmpfs文件系统(/dev/shm)
  2. android 开发学习笔记 (一)
  3. Yii2.0 GridView 新增添加按钮
  4. Crystal Reports "Access to report file denied. Another program may be using it."
  5. js 猜数字游戏
  6. EmguCV学习——简单算法 差分与高斯
  7. HNOI2010弹飞绵羊
  8. php入门单引号与双引号区别
  9. Java学习----字符串函数
  10. github 中redisPhpAdmin redis 可视化界面
  11. HDU3480
  12. pyqt 简单判断指定的内容强度(比如帐号)
  13. android面试题之一
  14. iOS_67控件外观对照
  15. PAT 团体程序设计天梯赛-练习集 L1-019. 谁先倒
  16. 清除input[type=number]的默认样式
  17. A+B for Input-Output Practice (VI)
  18. Unique-paths (动态规划)
  19. 内省(Introspector)
  20. Linux记录

热门文章

  1. JVM插庄之二:Java agent基础原理
  2. 微服务理论之三:RPC框架原理
  3. bean validator - Hibernate validator
  4. PWA PSI statusingclient.UpdateStatus更新任务页面的AssnCustomFields的TextValue值
  5. HBase 二级索引与Coprocessor协处理器
  6. linux 安装输入法
  7. 局域网中使用的IP地址有哪些?
  8. R-安装、卸载、查看及卸除加载包
  9. p2921 Trick or Treat on the Farm
  10. kafka之c接口常用API------librdkafka