- 增加AOP的maven
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjrt</artifactId>
<version>1.7.4</version>
</dependency>
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
<version>1.7.4</version>
</dependency>
- 定义注解
import java.lang.annotation.*;
@Target({ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface Incc {
}
- 将注解作为切点进行AOP增强
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Pointcut;
import org.springframework.stereotype.Component;
@Aspect
@Component
public class InccAOP {
@Pointcut("@annotation(Ack.ads.Incc)")
private void cc(){}
@Around("cc()")
public Object around(ProceedingJoinPoint point){
Object[] li = point.getArgs();
System.out.println("原先name:"+li[0]);
li[0] = "new world";
System.out.println("新的name:"+ li[0]);
try {
point.proceed(li);
} catch (Throwable throwable) {
throwable.printStackTrace();
}
return null;
}
}
- 使用方法测试
@Component
public class TTT {
@Incc
public void aa(String v){
System.out.println("最终:"+v);
}
}
- junit5单元测试
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
@SpringBootTest
class TTTTest {
@Autowired
private TTT t;
@org.junit.jupiter.api.Test
void aa() {
t.aa("old");
}
}