AOP的基本概念
首先,我先来介绍一下AOP的几个核心概念:
1.Aspect:跨越多个类的横切关注点的模块化,在Spring的AOP中,可以使用Schema和@Aspect注解的方式来实现。
2.Join Point:执行程序中的一个点。这里需要注意的是,一个Join Point总是代表一个方法的执行
3.Advice:在一个切面的特定的连接点上的执行行为。“Advice”的不同类型包括“around”、“before”、“after”的Advice.在Spring中通过代理模式实现AOP,并通过拦截器模式以环绕连接点的拦截器链织入通知.
4.PointCut:这里我们可以认为是一组连接点的集合。Advice匹配一个PointCut的执行并且运行在已于PointCut匹配的Joint Point中。
5.Introduction(引入):说明代表一个类型的附加方法或字段。Spring AOP允许你引入新的接口或者新的相匹配的实现来advice任意的对象
6.Target Object(目标对象):被Adviced到一个或多个Aspect的对象,或者作为Adviced的对象被引用。因为Spring实现使用运行时代理,这个对象就是代理对象。
7.AOP proxy(代理对象):通过AOP的Framework创建的对象为了来实现Aspect。在AOP中,一个代理对象就是一个JDK动态的代理或者一个CGLIB代理。也就是通过代理来对目标对象应用切面。
8.Weaving(织入):织入是一个过程,是将切面应用到目标对象从而创建出AOP代理对象的过程,织入可以在编译期、类装载期、运行期进行。(织入)在运行时执行。
其次,我来介绍一下Advice的类型:
1.before advice:在Joint Point前执行,但这个方法不能影响程序的正常执行(除非抛出异常)。
2.after running advice:在Joint Point正常完成后执行(在Joint Point处未抛出连接异常)
3.after throwing advice:在Joint Point抛出异常后执行
4.after(finally) advice:在Joint Point处执行返回的通知,类似于java的finally方法
5.around advice(最强大的一种advice):在方法调用前或者调用后执行定制的行为,并且执行Joint Point的决定是否执行连接点处的方法、替换返回值、抛出异常等等。
最后,我们来看一下AOP代理。Spring的AOP代理默认使用J2SE的动态代理(优先使用),它当然也可以使用CGLIB代理。对于代理类是必须的,但不是接口。对于J2SE的动态代理,请大家关注我接下来的文章。谢谢!