微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

条件切入点表达式

如何解决条件切入点表达式

我想基于数据库中的某些属性启用/禁用方面。我该怎么办?

我也正在使用AspectJ LTW,但是当我尝试在@pointcut中使用if()时,它会显示警告,但代码可以正常编译。我不想走那条路。另外,我不想将我的Aspect用作组件并使用Conditional属性,因为那样的话,我将不得不从属性文件中选择该属性。 这是我的代码的大致片段。

@Aspect
class A {
  boolean flag = //get value from DB; 
    
  @pointcut(value = "execution(* com.sample..check(..)) && if())
  public boolean conditional() {
    return flag==true ? true : false;
  }
    
  @Before("conditional()")
  public void doSomething() {
    System.out.println("Hello");
  }
}

aop.xml

<aspectj>
  <aspects>
    <aspect name = "com.sample.aspect.A"/>
    <weaver>
      <include within = "com.sample..*"/>
    </weaver>
  </aspects>
</aspectj>

解决方法

IntelliJ IDEA中的错误消息if pointcut designator isn't supported by Spring告诉您Spring AOP方面的真相。如果您在Spring项目中使用方面,它将自动启动。

在您的情况下,方面是本机AspectJ方面,而不是Spring AOP方面。 IDEA不理解这一点,因此解决问题的方法不是更改方法,而只是在编辑器中忽略错误消息,因为您对if()所做的操作是正确的。 / p>

或者,您也可以告诉IDEA 禁止某个方法或整个类的Spring AOP错误检查

例如,选择“禁止上课”后,错误将消失,并且您将在课程顶部看到注释@SuppressWarnings("SpringAopErrorsInspection")。那应该让您放心。但是请注意,由于Spring AOP切入点语法基本上是AspectJ语法的一个子集,因此这也有可能抑制其他同样适用于AspectJ的Spring AOP语法错误。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。