如何在测试中静态获取spring上下文或bean?

问题描述

我知道我可以@Autowire进行Spring上下文或测试类中的任何bean。但是有什么方法可以静态获取当前使用的上下文吗?

@SpringBootTest
class MyTest {

  @Autowire var applicationContext: ApplicationContext? // that's NOT what i want

  @Test
  fun myTest() {
    val result = HelperClass.staticFunction()
  }
}

然后:

class HelperClass {

  static public MyObject staticFunction( {
    return Some_spring_or_junit_static_class. 
           getCurrentSpringContextOrBean(nameOfBean)
  }
}

spring在运行多个测试时会缓存其顶点。但是有什么方法可以真正静态获得当前使用的吗?

解决方法

我认为您不能直接在静态类中注入bean,因为它将在SpringBoot实例化bean之前创建。但是您可以使用@PostConstruct批注在静态类中设置Bean。

@Autowired
public ApplicationContext applicationContext;

@PostConstruct
public void init() {
    HelperClass.setApplicationContext(applicationContext);
}

public class HelperClass {

    public static ApplicationContext applicationContext;

    public static void setApplicationContext(ApplicationContext applicationContext) {
        HelperClass.applicationContext = applicationContext;
    }

    public static Object staticMethod(String beanName) {
        return applicationContext.getBean(beanName);
    }
}

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...