Spring AOP之执行前通知@Before
此文章说一下执行前通知,即注解@Before。
作用
多用于日志记录、权限校验、初始化资源等。
触发时间
目标函数执行触发。
定义
@Aspect
@Component
public class AopBeforeAspect {
@Before("execution(public * com.example.demo.service.impl.AccountServiceImpl.aopBeforeMsg(..))")
public void beforeMsg(){
System.out.println("触发Before通知");
}
}
说明
execution用于指定监听范围。execution可以有很多写法,下面会介绍几种。
“execution(public * com.example.demo.service.impl.AccountServiceImpl.aopBeforeMsg(…))”
“execution(* com.example.demo.service.impl.AccountServiceImpl.aopBeforeMsg(…))”
以上两种写法都表明监听com.example.demo.service.impl.AccountServiceImpl类下的aopBeforeMsg函数。
“execution(public * com.example.demo.service.impl.AccountServiceImpl.*(…))”
以上表明监听AccountServiceImpl类下的所有函数。
“execution(public * com.example.demo.service.impl.AccountServiceImpl.get*(…))”
以上写法表明监听AccountServiceImpl类下所有get开头函数。
"execution(public * com.example.demo.service.impl.AccountServiceImpl.get*(…)) || || execution(* com.example.service.OrderService.get*(…)) "
以上写法表示监听AccountServiceImpl类与OrderService类中get开头的函数。
“execution(* com.example.service…*(…))”
以上写法表示监听service包下的所有函数。
注意点
- @Before只能监听public与protected修饰的函数,别private或者final修饰的无法触发
- @Before只能监听被Spring管理的实例。也就是说,假如是通过自己代码new的实例,无法触发