Spring的AOP默认是基于实现做切面的,如果注解放到接口上,无法生效,比如Mapper层接口注解。
可以通过MethodInterceptor、AbstractBeanFactoryPointcutAdvisor来实现。
public XXXAdvisor extends AbstractBeanFactoryPointCutAdvisor{
@Override
public Pointcut getPointcut(){
return new AnnotationMatchingPointcut(XXXAnnotation.clsss, true);
}
}
public XXXAdvice implements MethodInterceptor{
@Override
public Object invoke(MethodInvocation arg0) throws Throwable{
//business logic
// 此处注意Mapper走的是Proxy代理类
Class<?> proxyClass = arg0.getThis().getClass();
Type[] classTypes = proxyClass.getGenericInterfaces();
Class<?> clazz = Class.forName(classType[0].getTypeName());
return ...
}
}
public XXXConfig {
@Bean
public XXXAdvisor initXXXAdvisor(){
XXXAdvisor adviser = new XXXAdvisor();
advisor.setAdvice(new XXXAdvice());
return adviser
}
}
版权声明:本文为paristao原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。