问题描述
我知道我可以@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);
}
}