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();
}
测试结果
![notion image](https://www.notion.so/image/https%3A%2F%2Ffile.notion.so%2Ff%2Ff%2Fc4b09ed5-74ef-4c45-a19b-842549f2152c%2Feb227846-53dc-48bc-9fe5-37b034ad5933%2FUntitled.png%3Fid%3D1191d853-1bc1-4bd8-8390-468bd0938dfc%26table%3Dblock%26spaceId%3Dc4b09ed5-74ef-4c45-a19b-842549f2152c%26expirationTimestamp%3D1721599200000%26signature%3DTN4qDKf57rBnUVUJR9ut5NieMgiqzD7fiHhtH-k5brY?table=block&id=1191d853-1bc1-4bd8-8390-468bd0938dfc&cache=v2)