Spring 教程:AOP 切面编程
1、AOP的核心概念:
1、横切关注点
对哪些方法进行拦截,拦截后怎么处理,这些关注点称之为横切关注点
2、切面(aspect)
类是对物体特征的抽象,切面就是对横切关注点的抽象
3、连接点(join point)
被拦截到的点,因为Spring只支持方法类型的连接点,所以在Spring中连接点指的就是被拦截到的方法,实际上连接点还可以是字段或者构造器
4、切点(pointcut)
对一组连接点(方法)进行拦截的定义,用execution
5、通知(advice)
所谓通知指的就是指拦截到连接点之后要执行的代码,通知分为前置、后置、异常、最终、环绕通知五类
6、目标对象
代理的目标对象(核心业务对象)
7、织入(weave)
将切面应用到目标对象并导致代理对象创建的过程
8、引入(introduction)
在不修改代码的前提下,引入可以在运行期为类动态地添加一些方法或字段
2、Spring在运行期把切面作为一个bean放到Spring 容器中,使用代理类封装目标类的形式,在执行目标方法之前进行拦截,同时,在调用目标bean方法之前,执行切面逻辑。

3、Spring借助AspectJ的切点表达式语言来定义Spring切面:
arg() 限制连接点匹配参数为指定类型的执行方法
@args() 限制连接点匹配参数由指定注解标注的执行方法
execution() 用于匹配连接点的执行方法,其实就是定义拦截哪些方法
this() 限制连接点匹配AOP代理的bean引用为指定类型的类
target 限制连接点匹配目标对象为指定类型的类
@target() 限制连接点匹配特定的执行对象,这些对象对应的类要具有
指定类型的注解
within() 限制连接点匹配指定的类型
@within() 限制连接点匹配指定注解所标注的类型
(当使用Spring AOP时,方法定义在由指定的注解所标注
的类里)
@annotation 限定匹配带有指定注解的连接点
bean(): Spring 特有的指示器,可以使用bean的ID,名称,用于限
切点只匹配特定的bean
4、execution:定义切点,其实就是定义拦截哪些方法
下图:拦截concert.Performance类中所有方法名为perform的方法,不管有多少个重载,不管返回值是什么

5、@Aspect:作用在类上,表示该类是一个切面。
@After 通知方法会在目标方法返回或抛出异常后调用
@AfterReturning 通知方法会在目标方法返回后调用
@AfterThrowing 通知方法会在目标方法抛出异常后调用
@Around 通知方法会将目标方法封装起来
@Before 通知方法会在目标方法调用之前执行
6、spring Aop maven配置:

7、定义接口及其实现:
public interface Show {
void showTime();
}
@Service("show")
public class DftShow implements Show {
public void showTime() {
System.out.println("表演进行中");
}
}
8、定义一个切面:

9、在配置类中启用AspectJ注解的自动代理:

10、创建环绕通知

11、测试:
