1、AOP面向切面编程
采用了横向抽取的机制,取代了传统的纵向继承体系重复性代码。主要用途:事务管理、安全检查、缓存等。
AOP是在运行期通过代理方式向目标类织入增强代码。
2、AOP相关术语
(1)Joinpoint:连接点,可以被连接到的点,在spring中指的是方法。
(2)Pointcut:切入点,真正被拦截到的点。
(3)Advice:通知,拦截后要做的事。分为前置通知、后置通知、环绕通知、异常抛出通知。
(4)Target:目标,被增强的对象(类)。
(5)Weaving:织入,将Advice应用到Target的过程。
(6)Proxy:代理,被增强后,产生的一个代理对象。
(7)Aspect:切面,切入点和通知的组合。
3、AOP的底层实现原理
(1)JDK动态代理:针对接口生成子类,只能对实现接口的类进行代理。
(2)cglib动态代理:可以对普通类进行代理,生成了一个类,继承被代理的类。
4、AOP自动创建代理方式
BeanNameAutoProxyCreator:根据bean名称创建代理
DefaultAdvisorAutoProxyCreator:根据advisor本身包含信息创建代理
AnnotationAwareAspectJAutoProxyCreator:根据注解进行代理。
5、使用AspectJ实现AOP:注解方式和XML方式。
6、AspectJ的通知类型
(1)@Before:前置通知
(2)@AfterReturning:后置通知
(3)@Around:环绕通知。
(4)@AfterThrowing:异常抛出通知
(5)@After:最终通知。
(6)@DeclareParents:引介通知(了解即可)
通过execution函数,定义切点的方法切入。execution(<访问修饰符>?<返回类型><方法名>(<参数>)<异常>)