ABC.java の次のコードを考えてみましょう:
<code class="java">public void method1() { // ... method2(); // ... } public void method2() { // ... // ... }</code>
AOP をメソッド 2 に追加するには、アスペクトの作成が必要です、AOPLogger、アクセスをチェックするためのメソッド、checkAccess が含まれています。 Spring 構成には次のものが含まれます。
<code class="xml"><bean id="advice" class="p.AOPLogger" /> <aop:config> <aop:pointcut id="abc" expression="execution(*p.ABC.method2(..))" /> <aop:aspect id="service" ref="advice"> <aop:before pointcut-ref="abc" method="checkAccess" /> </aop:aspect> </aop:config></code>
ただし、アスペクト checkAccess は、method2 が呼び出されたときに呼び出されません。何が足りないのでしょうか?
AOP は、Bean を囲むプロキシにアスペクトを適用することで機能します。 Bean が参照されるとき、それはインスタンス化されたクラスではなく、実際のクラスに委任され、AOP などの機能を追加する合成クラスです。
この例では、method2 がクラスで直接呼び出されます。 Spring Bean として注入されると、外側のクラスがそのプロキシとして注入され、メソッド呼び出しのアスペクトをトリガーします。
ネストされたメソッド呼び出しで AOP を呼び出すには、次のオプションを考慮してください:
Spring のドキュメントには、詳細と考えられる回避策が記載されています。
以上がAOP アスペクトが入れ子になったメソッド呼び出しで呼び出されないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。