在导入的spring @Configuration中解析@Value

时间:2018-03-23 07:43:02

标签: spring configuration

我已经改变了原来的答案,因为它没有完整。更新后的答案如下:

我想在测试@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>

有人可以解释一下这种行为吗?

感谢您的回复。

米罗

1 个答案:

答案 0 :(得分:0)

@Value注释用于注入属性的值。如果要初始化Resource对象,请在类名上使用@PropertySource(value =&#34; classpath:xxxxx.properties&#34;)注释。