前言:
AOP是目前编程最核心的理念之一,Spring的核心可以用两个专用词汇解析,1、IOC,2、AOP;可见AOP的重要性,Java中的实现方式有几种:
静态代理:
动态代理:
以上实现方式网上很多资料,可以参考一些官网api doc;本文简单探讨下几种实现方式的优缺点,结合应用,说下哪个功能最强大
概念:
Spring中定义有一些代理的概念,切点,切面,连接点,引入增强等:
// TODO介绍下
设计模式:
设计模式有一章是专门介绍代理模式的,我们可以简单的手写一个代理类,也是我们的入门基础了;
优点:
完全不依赖框架,可以自己代码自己管理
缺点:
为了一点的功能可能要写很多代码,有点绕
AspectJ:
比较高级的,在编译期间就对注解进行解读,把相应逻辑织入切点中,需要特定的编译器
优点:
因为不需要动态生成类,所以性能好,而且可以直接改变被代理类,被代理类将不复存在;例子:可以在自己new的对象中,注入Spring管理的实例
缺点:
被代理类不会保留副本,依赖AspectJ编译器;
JDK:
Java自带的代理实现,属于动态生成字节码类,所以是保存有原来的类的,可能因为严格遵守代理模式,所以只能代理带有接口的类,没有接口不能被代理
优点:
不依赖框架
缺点:
无法代理没有接口的类,需要手动获取代理类方法,需要封装一下,最好配合IOC
CGLib:
也是动态生成字节码,但是是通过继承的方式实现的,所以可以代理没有接口的类
优点:
可以代理没有接口的类
缺点:
不能代理final,static,private等方法
原文:https://www.cnblogs.com/iCanhua/p/12865178.html