Spring AOP:创建检查父类注释的切入点

时间:2015-09-30 10:40:11

标签: java spring aop spring-aop

我有下一个界面和实现:

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

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

我需要拦截所有类方法的执行,它使用注释@Step扩展类。请帮我写一下切入点。

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

@Pointcut("@within(Step)")

但如果我只注释超类

,它就不起作用

1 个答案:

答案 0 :(得分:0)

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

下一个示例将起作用,但它不适用于已实现接口上的注释:

@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");
    }
}