4

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

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

4

2 回答 2

2

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 实例化侦听器之前已完成上下文创建。

于 2013-03-10T17:34:41.877 回答
0

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

于 2021-04-14T03:02:29.017 回答