春天依赖注入不及时完成(Spring dependency injection not comple

2019-11-01 05:07发布

所有,

我设置了使用依赖注入,等我遇到一个非常奇怪的行为,其中似乎集合中的一些豆子得到使用前,有些却没有完全初始化Spring IoC容器。 奇怪的是,所有这些豆类共享相同的超类和失败的依赖注入在超依赖的一个事情。 这里是例子:

@Component
class Bar {
  void doSomething() {
  // do something
  }
}

class Foo {
  @Autowired Bar bar
}

@Component
class FooSubclass1 extends Foo {
}

@Component
class FooSubclass2 extends Foo {
}

@Component
class FooManager implements InitializingBean {
  @Autowried Collection<Foo> myFoos

  void afterPropertiesSet() {
    for (Foo foo : myFoo) {
      foo.bar.doSomething()
    }
  }
}

在迭代FooSubclass1的实例时抛出,但零点迭代FooSubclass2的情况下试图访问bar.doSomething(),酒吧是空当启动时,上面的代码可以成功地“DoSomething的”。

值得注意的是,如果我不使用的InitializingBean作为启动标志我就不会遇到这个问题。 如果我只是等待程序加载,然后遍历FOOS的集合一切都很好。 因此,似乎有某种问题与时机 - FooSubclass2的实例已经豆创建并添加到上下文,但还没有完全豆注入。

我的春天的理解是,一个给定的对象应该完全创建/注射之前它被添加到背景和所有的依赖性都得到满足的afterPropertiesSet后,才应运行。 因此我真的不知道从哪里开始调试这个问题。

有几个注意事项:我在一个Groovy + Grails的安装运行这个虽然我不认为这涉及到这个问题。 这是在幕后所有的核心春,这显然东西是在春天的级别发生。 另外上面的例子是有点从我的真实的例子简单化了。 我注射了几十DAO类对象的集合到自动装配Autowired集合。 该注入使得通过几次成功的DAO的,但始终未能在同一个。 如果我从列表中删除DAO它无法在列表中的下一个。

文章来源: Spring dependency injection not completing in time