1

我需要检查我的切入点表达式,例如。我有这个豆子:

<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>

我的表情不起作用......我可以改变什么来做这个检查?

4

2 回答 2

1

是什么让你认为这and bean(logConfig)==COMPLETE是一个有效的切入点?Spring AOP 使用 AspectJ 切入点语法,没有 Spring 添加。此外,您甚至没有引用logLvl财产,所以这是否可行?

不幸的是,要实现这一点,您必须手动实施检查。但这并不是那么侵入性:只需注入logConfig方面ufeLogger并在logBefore()方法中添加一个简单的条件。

于 2011-11-14T10:22:43.160 回答
0

这是最相关的问题,请参阅下面的解决方案。我不时写方面表达式。表达可能不起作用。您需要编写正确的表达式,它将与您的目标方法匹配。我找到了一个简单的决定来检查一切是否清楚:

@Around(value="execution(* *.find(..))")
public Entity filterEntity(ProceedingJoinPoint pjp) throws Throwable {
   Entity entity = (Entity) pjp.proceed(); // put breakpoint here
}

在调试模式下,您可以在路径中检查用于匹配表达式的目标方法真实签名pjp.methodInvocation.method

我希望这个答案可以节省您查找错误的时间。

PS如果有更好的检查表达式的决定,很高兴看到它

于 2020-10-22T12:24:43.940 回答