我有两个Spring模块,Parent模块,它有一个子模块依赖项。两个项目都有自己的Spring注释bean,并使用distanceMatrix=sum(abs(bsxfun(@minus,permute(A,[1,3,2]),permute(B,[3,1,2]))),3);
创建bean。
Project子项在其资源中有@Bean
,此文件用于在子项目中为Bean设置属性。
Project Parent有自己的child.properties
,它也用于在父项目中创建bean。
=>每两个项目的parent.properties
类都使用ServiceConfig
注释,我使用:
父:
@Configuration
孩子:
@Bean public static PropertyPlaceholderConfigurer configuration(){
final PropertyPlaceholderConfigurer props=new PropertyPlaceholderConfigurer();
props.setLocations(new Resource[]{new ClassPathResource("parent.properties")});
return props;
}
现在我的问题是:我需要从子项目到父项目自动装配一个bean,当我运行父项目(在@Bean public static PropertyPlaceholderConfigurer configuration(){
final PropertyPlaceholderConfigurer props=new PropertyPlaceholderConfigurer();
props.setLocations(new Resource[]{new ClassPathResource("child.properties")});
return props;
}
中有子项目作为依赖项)时,自动连接的子bean无法运行因为pom.xml
没有被加载而构建。当我发现时,我看到春天只进入父母的child.properties
豆而不是孩子。
当我从父项中删除PropertyPlaceholderConfigurer
时,Spring会从子项目中加载PropertyPlaceholderConfigurer
Bean。
我可以通过将PropertyPlaceholderConfigurer
文件放在父项目中来解决此问题,但我不喜欢这个解决方案,我希望按项目保留每个配置。
答案 0 :(得分:0)
由于PropertyPlaceholderConfigurer bean都具有相同的bean名称,因此父bean会覆盖子bean(如果您仔细查看日志,那么您会在那里看到它) 尝试给他们不同的名字
答案 1 :(得分:0)
使用@PropertySources
注释为相应应用程序的Spring配置添加注释。它允许您指定@PropertySource
个文件的数组。
e.g。
@Configuration
@PropertySources({
@PropertySource("classpath:parent.properties"),
@PropertySource("classpath:child.properties")})
public class MyApp() // Add annotations on YOUR configuration
{
...
}
Spring会将注释的属性添加到您的应用程序中。有关更多信息,请参阅spring文档中的chapter 23。