10-20 Spring框架(三)—— AOP核心
一、概念
AOP(Aspect Oriented Programming)的缩写,翻译为面向切面编程或面向方面编程,通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术。
AOP(面向切面编程)和OOP(面向对象编程)是不同领域的两种设计思想
OOP(面向对象编程)
针对业务处理过程中属性和行为进行抽象和封装,以复用代码、降低系统复杂度。
AOP(面向切面编程)
针对业务处理过程中的切面进行横向提取,以隔离业务、降低业务之间的耦合度。
二、AOP使用场景
1.日志记录
2.性能统计
3.安全控制 主要针对安全权限
4.事务处理
5.异常处理
6.其他功能
三、AOP术语
连接点
AOP插入代码的特定位置(方法调用前,方法调用后,方法调用前后,抛出异常)
切点
AOP定位或查找连接点的方式(一个切点可以匹配多个连接点)
增强
AOP插入到连接点的一段代码程序(前置增强、后置增强、环绕增强和抛出异常增强)
引介
特殊的增强(可以为类添加一些属性和方法)
织入
插入代码的过程(AOP三种方式:编译器织入,类装载器织入,动态代理织入)
切面
由切点和增强或引介组成。(Spring AOP是负责实施切面的框架)
3.1注解
<!– 开启 AOP 注解开关 --> <aop:aspectj-autoproxy />
@Aspect 注解:放置于切面类上,用于注解定义一个切面
@Before 注解:放置于切面类方法上,用于注解实现前置增强
@After 注解:放置于切面类方法上,用于注解实现后置增强
@Around 注解:放置于切面类方法上,用于注解实现环绕增强
@AfterThrowing 注解:放置于切面类方法上,用于注解实现抛出异常增强
3.2切点表达式
切点表达式 = execution(返回值类型 + 包名 + 类名 + 方法名 + 参数个数)
切点表达式支持三个通配符:
符号(*) :代表任意字符,匹配上下文中的一个元素
符号(..):代表任意字符,可以代表多个元素,但是在表示类的时候不能单独使用,必须和 * 配合;在代表形参的时候可以单独使用
符号(+):代表按类型匹配指定类的所有类(包括子类),只能跟在类名的后面
举例:
execution(* com.dt..Dog.b(..))