多个依赖项冲突问题中具有相同名称的Bean

时间:2019-05-10 16:34:59

标签: java maven spring-boot javabeans

Spring Boot的新手。

我们在多个基本依赖项中都有可重用的bean。由于我们需要这些可重用的功能,因此我们要在pom.xml中继承这些jar。

例如:

Jar1:

ClassName:UserInfo,RequestInterceptors,ClassName3,ClassName4,ClassNameN。 PackageName:com.somename1.base.comps

Jar2:

ClassName:UserInfo,RequestInterceptors,ClassName3,ClassName4,ClassNameN。 PackageName:com.somename2.base.comps

由于类名相似,因此在构建时会产生冲突问题。

不幸的是,我们无法更改任何类名,因为其他团队正在使用这些jar。无权创建这些罐子的另一个版本。

有什么办法可以同时包含这两个jar,而不会在@EnableAutoConfiguration@ComponentScan中排除这些冲突的组件  注释?

有人可以在这里分享一些建议吗?

1 个答案:

答案 0 :(得分:0)

这里的解决方案是命名您的bean。发生冲突的原因是类的名称相同。例如:

@Configuration
public class Config{

  public com.somename2.base.comps.UserInfo somename2UserInfo(){
    return new com.somename2.base.comps.UserInfo();
  }
  public com.somename1.base.comps.UserInfo somename1UserInfo(){
    return new com.somename1.base.comps.UserInfo();
  }

}

然后将这些bean分别命名为somename1UserInfosomename2UserInfo,您可以在自动装配时使用这些名称,例如:

public class SomeImpl{

  @Autowired
  @Qualifier("somename1UserInfo")
  UserInfo userInfo;

  /*
   * Or you can do this
   */
  @Resource(name = "somename1UserInfo")
  UserInfo theSameUserInfo

} 

这将允许您自动装配在任何类中使用的bean。在类使用的每个位置都必须声明一个限定符可能并不理想,因此,如果主要使用一种实现,请考虑研究@Primary批注。