检查AOP切入点表达式

时间:2011-11-14 10:12:14

标签: spring aop expression pointcut

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

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

我的表情不起作用......我可以改变什么来进行检查?

2 个答案:

答案 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如果有更好的决定检查表达式,很高兴看到它