-
常见名词解释
- 通知、增强处理(Advice) : 代表你通过切面想要给目标方法添加的功能。常见的如:日志功能,方法用时。
- 连接点(JoinPoint) : 代表通知可以增加的临界点,比如方法的执行前,执行后,方法抛出异常后等。代码可用连接点,获取目标对象,目标方法等信息。
- 我理解它作为代理类的通知方法和目标类的目标方法的连接作用,起一个桥梁功能。各个切面应该都可以通过它获取目标类信息
- 切点(PointCut):代表你要增强的目标方法,仅做表示
- 切面(Aspect): 代表通知和切入点结合。
- 目标对象(Target):代表你想要增强的类。
- 目标方法: 被代理的方法,被切的方法。
-
官方文档execution表达式
execution(modifiers-pattern? ret-type-pattern declaring-type-pattern? name-pattern(param-pattern)throws-pattern?)
位置 表示 例子 modifier-pattern 方法返回的类型 public, protected, private, * declaring-type-pattern 包或者类 com.app.service.* - 适用在此包下的类<br />com.app.service.UserService - 只适用此类 name-pattern 方法名 set* - 适用以set开头的方法 param-pattern 方法参数 .. - 任何数量的参数<br />java.lang.String - Sting类型的参数 throws-pattern 方法抛出的异常 简单用法
此事例,建立在了解springboot简单基础知识基础上
1> 引入SpringAOP依赖
-
Spring AOP
<!-- Spring AOP --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-aop</artifactId> </dependency>
2>简单认识,前置通知举例
-
首先建切点
/** * 切点 */ @Pointcut("execution(public * com.gold.aoptest.BeAopedService.doWork(..))") public void aspect(){}
-
前置通知
/** * 前置通知 * @param joinPoint 连接点 */ @Before("execution(public * com.gold.aoptest.BeAopedService.doWork(..))") public void beforeMethod() { System.out.println("@Before 前置通知 start ..."); System.out.println("@Before 前置通知 逻辑代码"); System.out.println("@Before 前置通知 end ...); }
解释:当你运行类
BeAopedService
的doWork()
方法开始是,会执行此前置通知方法beforeMethod()