Spring框架核心之一,面向切面编程。
1、使用场景
系统日志处理
系统事务处理
系统安全验证
系统数据缓存
2、优点
在不改变原有功能代码的基础上扩展新的功能实现——OCP原则。
可以简化代码开发提高效率。
可以将非核心业务代码将业务层抽离。
3、相关概念
切面(aspect):横切面对象,一般为一个具体类对象(可以借助@Aspect声明),可以理解为要植入的新的业务功能,这个功能交给某个类负责,这个类就是切面。
切入点(pointcut):对连接点拦截内容的一种定义,在原有的哪些业务方法上扩展新的业务,可以将切入点理解为方法的集合,可以是1个类或某些类。
连接点(joinpoint):程序执行过程中某个特定的点,一般指被拦截到的的方法,可以简单理解为切入点中的一个具体方法。
通知(advice):拦截到连接点之后只要执行的方法,可以理解为一个业务中的扩展逻辑的若干步骤,先做什么(before),再做什么(afterReturn),最后做什么。
目标对象(target):封装原业务逻辑的对象。
代理对象(proxy):负责调用切面中的方法为目标对象植入新的功能。
4、通知注解
注解
用途
@Pointcut
定义切入点
@Before
目标方法执行之前执行
@After
目标方法执行之后必定执行,无论是否报错
@AfterReturning
目标方法有返回值