我已经改变了原来的答案,因为它没有完整。更新后的答案如下:
我想在测试@Configuration中自动装配资源文件。方案如下:
@RunWith(SpringRunner.class)
@ContextConfiguration(classes = TestConfiguration.class)
public class FooTest {
@Test
public void foo() {
}
}
@Slf4j
@Configuration
public class TestConfiguration extends BaseConfiguration {
@Value("classpath:derby-db.sql")
private Resource dbScript;
@Bean
public Object foo() {
log.info("{}", dbScript);
return new Object();
}
@Override
protected Object getFoo() {
return foo;
}
}
public abstract class BaseConfiguration {
@Autowired
@Qualifier("foo")
protected Object foo;
protected abstract Object getFoo();
}
但是,该方案不起作用。初始化bean dbScript
时,对foo
的引用为null。
如果我将名为foo
的受保护自动装配字段移出BaseConfiguration
并将其置于顶级TestConfiguration
,则所有内容都按预期工作,并初始化dbScript
引用。< / p>
有人可以解释一下这种行为吗?
感谢您的回复。
米罗
答案 0 :(得分:0)
@Value注释用于注入属性的值。如果要初始化Resource对象,请在类名上使用@PropertySource(value =&#34; classpath:xxxxx.properties&#34;)注释。