1 基本概念
1.1 关键概念
AOP 思想是和 Java 中的代理模式差不多,就是在不改变原有代码的情况下,对某些方法的功能进行增强。
其中关键的概念有:连接点、切入点、切面、通知;
连接点:需要被增强功能的方法,以及通知所包围的原有代码段;
切入点:需要被增强的方法;
切面:描述切入点和通知的关系,具体地指描述某个切入点需要哪个通知;
通知:就是一些不变的代码段,需要给多个切入点添加的功能相同的代码;
1.2 注意事项
1)切入点一定是连接点,连接点不一定是切入点。
2)想要使用注解的形式使用 AOP,必须在配置类中声明注解@EnableAspectJAutoProxy
2 通知类型
前置通知**@Before**
:在执行切入点方法前执行;
后置通知**@After**
:在执行切入点方法后执行;
环绕通知**@Around**
:在执行切入点方法前后执行,需要使用到 ProceedingJoinPoint 参数调用切入点方法,否则切入点方法不能执行;
返回后通知**@AfterReturning**
:正常执行切入点方法后执行;
抛出异常后通知**@AfterThrowing**
:一般用在程序 try–catch 块中捕捉到异常的时候执行;
3 切入点表达式
3.1 基本使用
切入点表达式声明在一个没有返回值类型,没有形参,没有方法实体的方法上,表达式会指定目标的访问权限(可省略)、返回值类型、权限类名(可按照一定规则简写)、抛出的异常类型(可省略);
说明:
1)@Component:定义的切面需要交给 IoC 容器管理;
2)@Aspect:使用注解的形式需要指明这是一个切面;
3) @Before(“pt()”):如上所示,method()就是这个案例中的“通知”,pt()是切入点,而实际的切入点在 pt()方法上使用@Pointcut("execution(void cn.edu.njust.dao.UserDao.update())")
指明,直接定位到具体的方法;
3.2 切入点表达式的更多细节
1)基本使用