@PropertySource是一个没有被Spring在JavaConfig中选中的bean

时间:2016-03-15 09:56:24

标签: java spring

我有两个不同的maven项目:项目A和项目B,其中A是B的maven依赖项。项目A有一个用@PropertySource注释的类:

@Component
@PropertySource({"classpath:spring-files/resource.properties"})
public class BeanAImpl implements BeanA{

@Value("#{\'${list.of.some.properties}\'.split(\',\')}")
    private String someProperties;
}

在项目B中,我希望能够定义BeanAImpl。所以我在项目B的JavaConfig类中定义它:

@Configuration
public class ProjectBConfig{

@Bean
public static PropertySourcesPlaceholderConfigurer propertySourcesPlaceholderConfigurer() {
    return new PropertySourcesPlaceholderConfigurer();
}
@Bean
public BeanA beanA() {
    return new BeanAImpl();
}

我得到一个BeanCreationException,因为将List注入“someProperties”失败了。如果我向我的@Configuration类(在项目B中)添加一个组件扫描BeanAImpl包的注释,那么上下文将成功加载。此外,如果我将@PropertySource声明添加到配置类 - 那么它将起作用。但似乎只是在配置中定义beanA,并没有考虑它的注释。我也尝试将beanA从@Component更改为@Configuration,但没有帮助。

有没有办法让BeanAImpl通过简单地将它定义为bean来从属性中注入值,而无需添加额外的配置?为什么会这样?

1 个答案:

答案 0 :(得分:0)

@PropertySource注释应该在使用@Configuration注释的类上,与此类似:

@Configuration
@PropertySource({"classpath:spring-files/resource.properties"})
public class ProjectBConfig{

或者您可以在项目A中创建单独的配置类。

有关@PropertySource注释的详细信息,请参阅javadoc