我有一个实现IInvokedMethodListener
. 我想在这个监听器中连接一个 Spring bean 并使用它。不幸的是,这个类是由 TestNG 实例化的,因此 Spring 无法连接任何使用@Autowired
. 我尝试实施ApplicationContextAware
,但这也不起作用。
有没有办法将 Spring bean 连接到实现的类中IInvokedMethodListener
?
ApplicationContextAware
仅适用于 Spring 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 实例化侦听器之前已完成上下文创建。
我最近也遇到了同样的问题,基本上是 Spring 没有维护 Listeners。所以我围绕这个概念做了一些谷歌搜索,比如“将 bean 注入不受 spring 管理的类”,我得到了https://dzone.com/articles/autowiring-spring-beans-into-classes-not-managed-by-spring链接这解释了完全相同的问题和解决方案。它对我有用。