Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java SpringAOP:创建检查父类注释的切入点_Java_Spring_Aop_Spring Aop - Fatal编程技术网

Java SpringAOP:创建检查父类注释的切入点

Java SpringAOP:创建检查父类注释的切入点,java,spring,aop,spring-aop,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
public interface TestAopComp {
    void test();
}

@Component
public class TestAopCompImpl implements TestAopComp{
    public void test(){
        System.out.println("test");
    }
}
我需要截获类的所有方法的执行,它使用注释@Step扩展类。请帮我写切入点

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

@Pointcut("@within(Step)")

但它不起作用,若我只注释超级类,我将研究这个问题。若您使用extendsfromclass(它可能是抽象的)和annotationannounce作为继承,那个么我的切入点可以工作,但它不适用于实现的接口

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

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