SpringAOP

面向切面的编程:把程序重复的代码抽取出来,在需要执行的时候,使用动态代理技术在不修改源代码的基础上对已有方法进行增强。

知识点:

● Aspect
表示切面。切入业务流程的一个独立模块。一个应用程序可以拥有任意数量的切面。
● Join point
表示连接点。也就是业务流程在运行过程中需要插入切面的具体位置(被拦截到的点。spring中具体指类的方法)。

● advice

前置通知(Before)

后置通知(AfterReturning) :在目标成功之后执行

异常通知(AfterThrowing) :在代码异常时执行

最终通知(After):在执行方法后执行

环绕通知(Around)

举例子:

  1. 基础功能

02上课笔记--SpringAOP_实例化

  1. 在原有基础上进行增加功能,实现的样子如下:
  • 先写一个Aspect.java类,切面类
@Aspect
public class MyAspect {
@Before("execution(* nuc.edu.aop.Service.Impl.UserServiceImpl.printUser(..))")
public void before() {
System.out.println("before...");
}
}

02上课笔记--SpringAOP_业务流程_02

  • 在主函数中实例化
    用注解@Bean进行实例化之后MyAspect中的代码都属于监听状态,然后当Controller层要调用printUser这个方法时,MyAspect中的@Before就会监听到,在printUser这个方法执行之前进行执行。
@Bean(name="myAspect")
//在实例化之后 MyAspect.java中的代码都被执行,都处于监听状态
public MyAspect initMyAspect(){
return new MyAspect();
}

02上课笔记--SpringAOP_业务流程_03

  • 定义切点,Pointcut,简化表达式