当前位置: 首页 > 知识库问答 >
问题:

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

赵献
2023-03-14

我有下一个接口和实现:

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

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

我需要截取类的所有方法的执行,它扩展了带有注释@步骤的类。请帮我写切入点。

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

@Pointcut("@within(Step)")

但它不工作,如果我注释只有超级类

共有1个答案

花博厚
2023-03-14

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

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

@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");
    }
}
 类似资料:
  • 对于用@X注释的类中的方法或用@X注释的方法,我需要一个切入点。我还需要注释对象。如果类和方法都被注释,我更喜欢将方法注释作为参数。 我尝试了以下操作,这会产生“绑定不一致”的警告。(为什么不直接将其设置为null?) 以下内容创建了“穿过切入点中的“||”的参数x的不明确绑定”警告。(在我看来,这不一定有意义:为什么不绑定第一个短路评估?) 如果存在类和方法注释,则将前面的尝试拆分为两个,自然会

  • 问题内容: 我正在寻找一个切入点,该切入点与类中具有特定注释的子类的类中的方法执行相匹配。出色的AspectJ备忘单帮助我创建了以下切入点: 这与带有@AnnotationToMatch的类A的所有方法调用匹配,但与扩展了A的类B的方法匹配。我如何将两者匹配? 问题答案:

  • 我试图在方法注释上创建一个Aeyj切入点,但我总是用不同的方法失败。我使用的是aspectj自动代理(我在Spring上下文中没有配置其他编织)。我的类如下所示: 所以我想知道为什么aspectj不会创建切入点。我设法使用执行(**(…)使其工作抛出一些exc)这对我来说很好,但我仍然想知道我做错了什么。 另外,由于是在接口中定义的,我指定了实现类的注释,有没有办法让它以这种方式工作?其他代理机制

  • 我有两节课 使用Spring AOP,我需要包装: 如果注释放在类级别上,则对使用注释的所有公共方法的所有调用 这是我的切入点 这适用于的公共方法,但是当我调用时,未包装如何包含父方法?

  • 我有一个包含三个字段的表,比如a、b、c。我想添加一个约束,确保如果a不为null,那么b和c也不为null。我已经使用以下SQL完成了这项工作 使用hibernate注解@Check有没有办法达到同样的效果? 我找不到一个有用的注释示例,开发人员倾向于根本不使用它吗?

  • 问题内容: 我需要 在类中使用@X注释的方法或使用@X注释的方法的切入点 。我还 需要注释对象 。如果同时注释了类和方法,则 我更喜欢将方法注释作为参数 。 我尝试了以下操作,这将创建“不一致的绑定”警告。(为什么不将它们设置为null?) 下面创建“跨’||’的参数x的模糊绑定 在切入点”警告。(我认为这并不一定有意义:为什么不绑定第一个短路评估?) 如果存在类和方法注释,则将先前的尝试自然地分