【问题标题】:How to avoid beans with same id?如何避免具有相同id的bean?
【发布时间】:2016-11-21 00:45:20
【问题描述】:

我有一个熟悉这个bean override的问题

2 个 bean 具有相同的 id,但它们的包不同。 Bean A 被 Bean B 覆盖。 我花了很多时间寻找原因。

所以我想阻止这种情况。我的要求是spring抛出一个异常,如果遇到这样的情况就关闭初始化过程。

【问题讨论】:

  • 乍一看,我把标题误读为“如何避免使用相同 id 的熊”......并认为这些 id 可能无关紧要:-)
  • 为什么不使用包名和 bean 名?
  • @Qualifier 可能对你有帮助..
  • 团队合作。 2 个人为他们的 bean 赋予相同的 id,但名称相同但包不同。
  • 那就去和这两个家伙谈谈,让他们中的至少一个改个豆子的名字。

标签: java spring inject


【解决方案1】:

Spring 不能在一个上下文中拥有两个具有相同 id 的 bean。所以解决方案很明显 - 使用不同的 id。

如果您使用的是 xml 上下文,它应该是:

<bean id="foo" class="what.ever.foo.Class" />

<bean id="bar" class="what.ever.package1.Class" />

如果你使用注解和组件扫描:

@Component("foo")
@Component("bar")

基于注释的上下文使用不同的方法名称:

   @Bean
   public Foo foo() {
      return new Foo();
   }
   @Bean
   public Bar bar() {
      return new Bar();
   }

【讨论】:

    【解决方案2】:

    您可以@Inject (@Autowire) 按类型而不是 ID。继续阅读Autowiring collaborators。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-04-22
      • 1970-01-01
      • 2018-02-13
      • 2012-11-18
      • 2018-05-20
      • 1970-01-01
      • 1970-01-01
      • 2021-07-18
      相关资源
      最近更新 更多