Spring 基于注解的接口AOP实现——Mapper实例

  • Post author:
  • Post category:其他

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 版权协议,转载请附上原文出处链接和本声明。