Spring中怎么使用AOP
引入需要的maven依赖
<!-- https://mvnrepository.com/artifact/org.springframework/spring-aspects -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aspects</artifactId>
<version>5.3.9</version>
</dependency>
由于maven依赖关系会自动导入ASPECTJ
ASPECTJ的使用方法
execution([权限修饰符(可省略)][返回类型][类全路径][方法名称][参数列表])
注解
@After
@AfterReturning
@AfterThrowing
@Around
@Before
通知
通知方法会在目标方法返回或抛出异常后调用
通知方法会在目标方法返回后调用
通知方法会在目标方法抛出异常后调用
通知方法会将目标方法封装起来
通知方法会在目标方法调用之前执行
创建一个代理类,使用注解来AOP
package demo.service;
import org.aspectj.lang.annotation.After;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.springframework.stereotype.Component;
@Aspect
@Component
public class UserServiceProxy {
@Before("execution(* demo.service.UserService.eat(..))")
public void before(){
System.out.println("我洗手了");
}
@After("execution(* demo.service.UserService.eat(..))")
public void after(){
System.out.println("我洗碗了");
}
}
创建配置文件,开启自动注入AOP
package demo.config;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.EnableAspectJAutoProxy;
@Configuration
@EnableAspectJAutoProxy
public class MyConfig {
}
编写测试方法
@Test
public void test02(){
ApplicationContext context = new AnnotationConfigApplicationContext("demo");
UserService userService = context.getBean("userServiceImpl", UserService.class);
System.out.println(userService);
userService.eat();
}
测试结果