32 切入点表达式
描述方式一
描述接口
描述方式二
描述实现类
切入点表达式标准格式
execution (访问控制修饰符 返回值 包名.类/接口名.方法名(参数) 异常名)
可以使用通配符
* 单个独立的任意符号
.. 多个连续的任意符号,可以独立出现,常用于简化包名和参数的书写。
@PointCut("execution(void com.itheima.dao.BookDao.update())")
@PointCut("execution(void com.*.*.*.update())")
@PointCut("execution(void *..update())")
//给所有业务层查询方法加AOP
@Pointcut("execution(* com.itheima.*.*Service.find*(..))")
书写技巧
代码按照规范,否则技巧失效。
切入点通常描述接口,不描述实现类。
33 AOP通知类型
环绕通知(重点)
//前后都有
@Around("pt()")
public void around(ProceedingJointPoint pjp){
sout("around");
//标识对原始操作的调用
pjp.proceed();
sout("around after");
}
测试有返回值情况
@Around("pt()")
public Object aroundSelect(ProceedingJointPoint pjp){
sout("around before");
//对原始操作调用
Object ret=pjp.proceed();
sout("around after");
return ret;
}
@AfterReturning
只有当上面方法没有抛异常正常执行才生效