我需要检查我的切入点表达式。 我有这个豆子:
<bean id="logConfig"
class="com.celfocus.ufe.base.logging.domains.LoggingConfiguration">
<property name="logDetails" value="STANDARD" />
<property name="logLvl" value="COMPLETE" />
</bean>
在我的aop切入点表达式中,我需要检查以验证bean属性“logLvl”的值。
<aop:config>
<aop:aspect ref="ufeLogger">
<aop:pointcut id="complete" expression="execution(* *.*(..)) and bean(logConfig)==COMPLETE" />
<aop:before pointcut-ref="complete" method="logBefore" />
</aop:aspect>
</aop:config>
我的表情不起作用......我可以改变什么来进行检查?
答案 0 :(得分:1)
是什么让你认为and bean(logConfig)==COMPLETE
是一个有效的切入点? Spring AOP使用AspectJ切入点语法,没有Spring添加。你甚至没有引用logLvl
属性,所以这个假设有效吗?
不幸的是,要实现这一点,您必须手动执行检查。但这并不是那么具有侵入性:只需将logConfig
注入ufeLogger
方面,然后在logBefore()
方法中添加一个简单条件。
答案 1 :(得分:0)
这是最相关的问题,下面提供解决方案。我不时编写方面表达式。表达可能不起作用。您需要编写正确的表达式,它将与您的目标方法匹配。我发现一个简单的决定来检查所有内容是否清晰:
@Around(value="execution(* *.find(..))")
public Entity filterEntity(ProceedingJoinPoint pjp) throws Throwable {
Entity entity = (Entity) pjp.proceed(); // put breakpoint here
}
在调试模式下,您可以在路径pjp.methodInvocation.method
中检查用于与表达式匹配的目标方法的真实签名
我希望这个答案可以节省您发现错误的时间。
P.S如果有更好的决定检查表达式,很高兴看到它