代理模式:为对象提供一个替身,以控制对这个对象的访问。(代理通过实现对象的接口,并在代理中注入该对象,控制该对象的访问)

动态代理:在java.lang.reflect包中有自己的代理支持,利用这个包可以在运行时动态地创建一个代理类,实现一个或者多个接口并将方法的调用转发到你所指定的类。

 

AOP原理

AOP实际上是由目标类的代理类实现的。

由AOP框架动态生成的一个代理对象,该代理对象可作为目标对象的替身使用。

代理对象包含了目标对象的全部方法,但代理对象中的方法与目标对象的方法存在差异,

代理对象的方法在特定切入点添加了增强处理,并调用目标对象的方法。

 

Spring中对AOP的支持

Spring中AOP代理对象由Spring的IoC容器负责生成、管理,其依赖关系也由IoC容器负责管理。

因此,AOP代理可以直接使用容器中的其他Bean实例作为目标,这种关系可由IoC容器的依赖注入提供。

Spring默认使用Java动态代理来创建AOP代理,这样就可以为任何接口实例创建代理了。

当需要代理的类不是代理接口的时候, Spring自动会切换为使用CGLIB代理,也可强制使用CGLIB。 

 

AOP编程

1、定义普通业务组件(被代理对象)。

2、定义切入点,一个切入点可能横切多个业务组件。(需要代理的方法

3、定义增强处理,增强处理就是在AOP框架为普通业务组件织入的处理动作。(InvocationHandler的invoke方法)。

所以进行AOP编程的关键就是定义切入点和定义增强处理。

一旦定义了合适的切入点和增强处理,AOP框架将会自动生成AOP代理。

即:代理对象的方法 = 增强处理 + 被代理对象的方法。

 

Spring 中 AOP 的实现。

Spring有两种方式来定义切入点和增强处理。

 

1、基于 Annotation 的“零配置”方式:使用@Aspect、@Pointcut等 Annotation 来标注切入点和增强处理。

2、基于 XML 配置文件的管理方式:使用 Spring 配置文件来定义切入点和增强点。