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可以有很多写法,记录下面几种。
监听具体函数
以下两种写法都表明监听com.example.demo.service.impl.AccountServiceImpl类下的aopBeforeMsg函数。
“execution(public * com.example.demo.service.impl.AccountServiceImpl.aopBeforeMsg(…))”
“execution(* com.example.demo.service.impl.AccountServiceImpl.aopBeforeMsg(…))”
监听类下所有函数
“execution(public * com.example.demo.service.impl.AccountServiceImpl.*(…))”
监听类下所有get开头函数
“execution(public * com.example.demo.service.impl.AccountServiceImpl.get*(…))”
监听多个类
"execution(public * com.example.demo.service.impl.AccountServiceImpl.get*(…)) || || execution(* com.example.service.OrderService.get*(…)) "
监听报下所有
“execution(* com.example.service…*(…))”
注意点
- @Before只能监听public与protected修饰的函数,被private或者final修饰的无法触发
- @Before只能监听被Spring管理的实例。也就是说,假如是通过自己代码new的实例,无法触发