将bean连接到实现IInvokedMethodListener的TestNG侦听器

时间:2013-01-17 21:07:29

标签: spring testng spring-3

我有一个实现IInvokedMethodListener的TestNG监听器。我想在这个监听器中连接一个Spring bean并使用它。不幸的是,这个类是由TestNG实例化的,因此Spring无法使用@Autowired进行注释。我尝试实施ApplicationContextAware,但这也不起作用。

有没有办法将Spring bean连接到实现IInvokedMethodListener的类?

2 个答案:

答案 0 :(得分:2)

ApplicationContextAware仅适用于Spring Beans。您可以使用@Configurable,但这需要使用AspectJ。

这是一个应该工作的简单hack:将一个静态成员添加到监听器类并通过非静态setter注入它。

public class MyMethodListener implements IInvokedMethodListener {

   private static MyBean myBean;

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

在您的应用程序上下文中包含所需类型的bean。

TestNG实例化的侦听器与Spring上下文中的侦听器不是同一个实例,但如果在TestNG实例化侦听器之前完成上下文创建,它将具有静态成员集。

答案 1 :(得分:0)

我最近遇到了同样的问题,基本上是 Listeners 不是由 spring 维护的。因此,我对这个概念进行了一些谷歌搜索,例如“将 bean 注入不由 spring 管理的类”,我得到了 https://dzone.com/articles/autowiring-spring-beans-into-classes-not-managed-by-spring 链接,它解释了完全相同的问题和解决方案。它对我有用。