4

を実装する TestNG リスナーがありますIInvokedMethodListener。このリスナー内にSpring Beanを配線して使用したいと思います。残念ながら、このクラスは TestNG によってインスタンス化されるため、Spring は を使用してアノテーションが付けられたものをワイヤリングできません@Autowired。を実装してみApplicationContextAwareましたが、それもうまくいきません。

Spring Bean を実装するクラスに配線する方法はありIInvokedMethodListenerますか?

4

2 に答える 2

2

ApplicationContextAwareSpring Bean でのみ機能します。@Configurableを使用できますが、それには AspectJ が必要です。

動作するはずの簡単なハックを次に示します。静的メンバーをリスナー クラスに追加し、非静的セッターを介して注入します。

public class MyMethodListener implements IInvokedMethodListener {

   private static MyBean myBean;

   @Autowired
   public void setMyBean(MyBean myBean) {
        MyMethodListener.myBean = myBean;
   }
}

アプリケーションコンテキストに必要なタイプの Bean を含めます。

TestNG によってインスタンス化されたリスナーは、Spring コンテキストからのインスタンスと同じインスタンスにはなりませんが、TestNG がリスナーをインスタンス化する前にコンテキストの作成が完了していれば、静的メンバー セットがあります。

于 2013-03-10T17:34:41.877 に答える
0

私は最近同じ問題を抱えていました。基本的にリスナーは春までに維持されません。そこで、「Spring で管理されていないクラスに Bean を注入する」などのこの概念をグーグルで調べて、https://dzone.com/articles/autowiring-spring-beans-into-classes-not-managed-by-springリンクまったく同じ問題と解決策を説明しています。それは私のために働いた。

于 2021-04-14T03:02:29.017 に答える