spring boot切面编程
使用@Aspect
实现切面编程:
jar包依赖, spring
依赖spring-aop
和spring-aspects
, @Aspect
依赖aopalliance
,aspectjweaver
。
spring boot
工程需要添加implementation 'org.springframework.boot:spring-boot-starter-aop'
。
代码:
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.springframework.context.annotation.Configuration;
import java.util.Arrays;
@Configuration
@Aspect
public class AOPConfig {
@Around("@within(org.springframework.web.bind.annotation.RestController)")
public Object simpleAOP(final ProceedingJoinPoint pjp) throws Throwable {
try {
Object[] args = pjp.getArgs();
System.out.println("args: " + Arrays.asList(args));
Object o = pjp.proceed();
System.out.println("return: " + o);
return o;
} catch (Throwable e) {
throw e;
}
}
}
- 代码中
Object o = pjp.proceed();
,在正常调用时,不需要添加args参数,在内部反射回调原函数时,会自动添加入参。 ProceedingJoinPoint
同时提供了proceed(Object[] args)
的方法,如果把代码替换为Object o = pjp.proceed(new String[]{"robin"});
会替换原来的入参。