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 に答える