用的较多的是JDK动态代理:
代理设计模式的原理:使用一个代理将对象包装起来,然后用该代理对象取代原始对象,任何队员是对象的调用都要通过代理,代理对象决定是否以及何时将方法调用转到原始对象上。
原理如下图所示:
AOP(Aspect-oriented Programming) 是一种编程模式,是对OOP的补充。aop主要编程对象时切面。
在应用aop时,仍然需要定义公共功能,但可以明确定义这个功能在哪里,以什么样的方式应用,并且不必修改受影响的类。
AOP的优点:
降低模块耦合度,使系统容易扩展,更好的代码复用性。
AOP术语:切面(aspect)一个横切关注点的模块化,这个关注点可能会横切多个对象。它是横切关注点的另一种表达方式
连接点(Joinpoint)在程序执行过程中某个特定的点,比如某方法调用的时候或者处理异常的时候。
切入点(Pointcut)匹配连接点的断言。它通常是一个表达式,有专门的语法,用于指明在哪里(或者说在哪些方法调用上)嵌入横切逻辑
通知(Advice)在切面的某个特定的连接点上执行的动作,也就是我们前面提到的横切逻辑,如日志处理逻辑,事务处理逻辑。
目标对象(Target Object)被一个或者多个切面所通知的对象,也被称作被通知对象
代理对象(Proxy Object)AOP框架创建的对象,它和目标对象遵循同样的接口,使用它的方式和使用目标对象的方式是一样的,但是它是目标对象的增强版,“通知”中的代码执行将会被代理对象的方法调用触发。在Spring中,AOP代理可以是JDK动态代理或者CGLIB代理。