1

由于依赖注入意味着控制反转,因此我在以下调用中看不到 IOC:

  Car car = (Car)ApplicationContext.getBean("car");

自己编写类不是 Spring,因为我自己将 Car 编写到代码中。

此外,所有书籍都讨论了两种 DI:setter 和 constructor DI。

所以我想知道调用 ApplicationContext.getBean() 是否意味着任何类型的依赖注入和 IOC,或者根本没有 DI。

4

4 回答 4

1

不,以这种方式获取 bean 不是依赖注入。它没有被注入。不过,该 bean 的字段可能已被注入。

有时确实没有办法解决它,但总的来说,尽量避免这种情况。

于 2013-02-12T09:30:48.847 回答
0

自己编写类不是 Spring,因为我自己将 Car 编写到代码中。

在这种情况下,你会得到一个NoSuchBeanDefinitionException. 您需要告诉 Spring 它需要管理的每个类——有多种方法可以做到这一点,从自动装配到描述符中的显式定义。

于 2013-02-12T09:34:02.390 回答
0

getBean确实使用与 Spring 的注入相同的配置 ( ) applicationContext,但您的示例未使用任何依赖项注入。(好吧,Carbean 可以注入它的依赖项,所以我们从你的例子中并不知道)。

但通常依赖注入意味着您不会自己进行任何编程设置(Car car = something)。Spring 容器将为car您创建实例,并使用car's setter 或它的构造函数,将注入 x 需要工作的依赖项。

于 2013-02-12T09:35:59.903 回答
0

我不知道为什么要尝试以这种方式获取 Car 引用...如果您想在另一个类中使用 Car 的引用,您可以像您所说的那样简单地使用 setter 或构造函数注入..如果您将其用作以上述方式,我在那里看不到任何类型的 DI。我们可以肯定地说,当您试图从应用程序上下文中获取引用时,bean 由 IOC 容器管理......

于 2013-02-12T09:36:08.750 回答