【问题标题】:Spring AOP: create pointcut which check parent class annotationSpring AOP:创建检查父类注释的切入点
【发布时间】:2015-09-30 10:40:11
【问题描述】:

我有下一个接口和实现:

@Step
public interface TestAopComp {
    void test();
}

@Component
public class TestAopCompImpl implements TestAopComp{
    public void test(){
        System.out.println("test");
    }
}

我需要拦截类的所有方法的执行,它扩展了带有注解@Step的类。请帮我写切入点。

例如我使用下一个切入点来截取类的方法,由@Step注解:

@Pointcut("@within(Step)")

但如果我只注释超类,它不起作用

【问题讨论】:

    标签: java spring aop spring-aop


    【解决方案1】:

    我调查问题。如果您使用类的扩展(它可能是抽象的)并且注释宣布为继承,那么我的切入点将起作用,但它不适用于已实现的接口。

    下一个示例可以使用,但它不适用于已实现接口上的注释:

    @Step
    public abstract class TestAopComp {
        public abstract void test();
    }
    
    @Component
    public class TestAopCompImpl extends TestAopComp{
        public void test(){
            System.out.println("test");
        }
    }
    
    @Inherited
    @Retention(RetentionPolicy.RUNTIME)
    @Target(ElementType.TYPE)
    public @interface Step {
    }
    
    @Component
    @Aspect
    public class Aspect {
        @Pointcut("@within(Step)")
        public void stepClass(){}
    
        @Around("stepClass()")
        public void stepAround(ProceedingJoinPoint pjp){
            System.out.println("before");
            try {
                pjp.proceed(pjp.getArgs());
            } catch (Throwable throwable) {
                throwable.printStackTrace();
            }
            System.out.println("after");
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多