1

これが問題です。私は、あらゆる種類のコンポーネントに拡張できる AOP を使用した監視ソリューションに取り組んできました。私は自分の懸念を領域で打破しようとします。

アイデア:
Spring Bean である型に基づいて動的なポイントカット式の定義を可能にするメカニズムを用意します。

私がしたこと:
ApplicationContextAware を実装するコンポーネントを作成しました。これは、Spring コンテキストを検査し、Pointcut で考慮する必要があるすべての Bean タイプと名前のリストを作成します。

問題:
この問題は、Spring AOP プロセスが既にプロキシされたオブジェクトを作成しているため、この時点で Pointcut を再定義したり使用したりできないことです。

私が試したこと:
• Bean のリストと比較する独自の Pointcut、Advisor、および Advice を実装しましたが、無視されています。
• PointcutFactoryBean を実装しました。これは、すでに宣言されている Advisor に Pointcut を提供するものです。
• すでに宣言されている Pointcut を変更し (beanId に基づいて新しい式を追加)、それを BeanNameAutoProxyCreator に関連付け、Interceptor をこの Pointcut に関連付けようとしました。たとえば、次のようになります。
bean(bean1) || bean(otherBean) など。

これらすべての試みで、私は同じ問題に出くわしました。すべてがすでに定義されており、コンテキストから変更することはできません。

質問:
これは Spring AOP でも可能ですか? ウィービングなど、これに AspectJ の問題を巻き込みたくありません... 要約すると、ポイントカット式を作成し、アプリケーションの起動時にポイントカットに割り当てて、すべての豆を考慮してください。

明確であったことを願っています。そうでない場合はお知らせください。詳細またはコードを提供するために最善を尽くします。

よろしくお願いします!

4

1 に答える 1

1

AOPに関連する各クラスの独自の実装を作成することで、これを行うことができました:

  • ポイントカット。
  • メソッドマッチャー。
  • 親のアドバイザー。
  • クラスフィルター。

そして、Spring を使用してそれらを直接インスタンス化し、Spring コンテキストに空の aop:config 要素を追加するだけで、これを問題なく機能させることができました。

さらに詳しい情報が必要な場合は、お知らせください。

ありがとう!

于 2012-04-20T15:43:59.057 に答える