我有两个不同的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来从属性中注入值,而无需添加额外的配置?为什么会这样?
答案 0 :(得分:0)
@PropertySource
注释应该在使用@Configuration
注释的类上,与此类似:
@Configuration
@PropertySource({"classpath:spring-files/resource.properties"})
public class ProjectBConfig{
或者您可以在项目A中创建单独的配置类。
有关@PropertySource注释的详细信息,请参阅javadoc。