2

次のポイントカット定義のアスペクトがあります

@Pointcut("execution(public de.company.project..* *(..))")

および以下を含むばね構成

<aop:aspectj-autoproxy />

<bean id="myaspect"
        class="de.company.project.impl.MyAspect" />

<bean id="someService" class="de.company.project.impl.SomeService" />

<bean name="/SomeService"
    class="org.springframework.remoting.caucho.HessianServiceExporter">
    <property name="service" ref="someService" />
    <property name="serviceInterface"
        value="de.company.project.interf.SomeService" />
</bean>

(実際の構成には複数のサービスがあります)

一部のメソッドでアスペクトが呼び出されるのがわかりますが、すべてではありません。インターフェイスで直接宣言されたメソッドのみがアスペクトにラップされ、スーパーインターフェイスで宣言されたメソッドは無視されるのではないかと疑っています(ただし、そのインターフェイスは同じポイントカットに一致する必要があります)。

これは予想される動作ですか?どうすれば変更できますか?他に何が起こっているのでしょうか?

4

2 に答える 2

2

答えは: Pointcut パターンを台無しにしました。こんな感じ

@Pointcut("execution(public de.company.project..* *(..))")

戻り型のパッケージを指定しますが、これは

@Pointcut("execution(public de.company.project..*(..))")

メソッドを持つ型のパッケージを指定します。

Spring AOP ポイントカットの説明が必要です

于 2011-03-16T09:14:25.230 に答える
1

推測です。これがセットアップの実際の理由である可能性があるという証拠はありません。

Spring AOP がローカル メソッド呼び出しをインターセプトしないことはわかっています。つまり、適用されるプロキシは、同じオブジェクトが独自のメソッドを呼び出す場合、たとえそれがポイントカット式に一致したとしても、呼び出しをインターセプトしません。

編集:別の推測。問題のクラスのすべてのインスタンスが Spring マネージド コードであると確信していますか? コードの一部 (または一部のライブラリ) が、Spring を使用せずにクラスのインスタンスを作成する可能性はありますか? そのようなことが起こった場合、Spring AOP は Spring 管理の Bean のみを織り交ぜているため、Spring AOP はそのような Bean をインターセプトできません。

于 2011-02-28T12:21:33.083 に答える