【发布时间】:2020-10-30 18:11:40
【问题描述】:
我使用 spring 5,我看到,当我将 spring 用于测试(使用 junit 5)和主代码时,它的行为不同。最主要的是,当我使用 spring 进行测试时,该单例在启动期间没有被初始化。
例如,这是我的代码
@Component
@Scope(value = ConfigurableBeanFactory.SCOPE_SINGLETON)
public class Foo<T> {
public Foo(Class<T> someClass) {
//...
}
}
正如所见,这个类在构造函数中需要参数,所以我手动创建它的实例 - context.getBean(....)。当这个类用于测试时 - 一切都很好。但是,当我在主代码中使用它时,我会在春季启动时得到:
NoSuchBeanDefinitionException: No qualifying bean of type 'java.lang.Class<?>' available: expected at least 1 bean which qualifies as autowire candidate.
这是我的测试示例:
@ExtendWith({SpringExtension.class})
@ContextConfiguration(classes = ContextConfig.class)
public class TestIT {}
如何解释这种不同的行为?我在春季没有太多经验,因此非常感谢您的帮助。
【问题讨论】:
-
spring 的默认作用域是单例!
标签: java spring junit spring-test