什么是AOP
- 面向切面编程,不通过修改源代码的方式,在业务中增加新功能,降低业务逻辑之间的耦合度,提高代码可重用性
底层原理
- AOP底层使用动态代理
- 有接口情况使用JDK动态代理
- 创建接口实现类代理对象
- 无接口情况使用CGLIB动态代理
- 创建当前类子类的代理对象
- 有接口情况使用JDK动态代理
AOP术语
- 连接点:可以增强的方法
- 切入点:实际被增强的方法
- 通知:
- 被增强的部分
- 通知的类型:
- 前置通知(@Before)
- 后置通知(@AfterReturning)
- 环绕通知(@Around)
- 异常通知(@AfterThrowing)
- 最终通知(@After)
- 切面:将通知应用到切入点的过程称作切面
AOP操作
- Spring一般都基于AspectJ进行AOP操作
- 切入点表达式
- 表明对哪个类的哪个方法进行增强
- 语法:execution([权限修饰符] [返回类型(可省略)] [全类名].[方法名称] ([参数列表]) )
- 基于XML实现
- 基于注解实现
- 写代理类,用@Aspect注解标注
- 在配置文件中添加< aop:aspectj-autoproxy/ >
- 用@Before,@After等注解来标记要通知的方法