深入AOP(2)

Created
Oct 30, 2021 07:30 AM
Tags
Spring

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("我洗碗了");
    }
}
UserServiceProxy.java
创建配置文件,开启自动注入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