我有一个实现IInvokedMethodListener
的TestNG监听器。我想在这个监听器中连接一个Spring bean并使用它。不幸的是,这个类是由TestNG实例化的,因此Spring无法使用@Autowired
进行注释。我尝试实施ApplicationContextAware
,但这也不起作用。
有没有办法将Spring bean连接到实现IInvokedMethodListener
的类?
答案 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 链接,它解释了完全相同的问题和解决方案。它对我有用。