问题描述
我也正在使用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语法错误。