- 编写一个Advice实现类,并实现相应的advice接口
public class CustomMethodInterceptor implements MethodInterceptor {
public CustomMethodInterceptor() {
}
@Override
public Object invoke(MethodInvocation invocation) throws Throwable {
System.out.println(
"before : " + invocation.getMethod().getDeclaringClass() + "." + invocation.getMethod().getName());
try {
return invocation.proceed();
} finally {
System.out.println(
"after : " + invocation.getMethod().getDeclaringClass() + "." + invocation.getMethod().getName());
}
}
}
- 加入切面依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-aop</artifactId>
</dependency>
- 编写配置类
@Configuration
@Role(BeanDefinition.ROLE_INFRASTRUCTURE)
@EnableAspectJAutoProxy(exposeProxy = true)
public class CustomAdviceAutoConfiguration {
@Bean
public DefaultPointcutAdvisor customPointcutAdvisor(CustomInterceptor customInterceptor) {
AnnotationMatchingPointcut pointcut = AnnotationMatchingPointcut.forMethodAnnotation(CustomLogger.class);
DefaultPointcutAdvisor pointcutAdvisor = new DefaultPointcutAdvisor(pointcut, customInterceptor);
return pointcutAdvisor;
}
@Bean
@Role(BeanDefinition.ROLE_INFRASTRUCTURE)
public CustomMethodInterceptor customMethodInterceptor() {
return new CustomMethodInterceptor();
}
}