由于依赖注入意味着控制反转,因此我在以下调用中看不到 IOC:
Car car = (Car)ApplicationContext.getBean("car");
自己编写类不是 Spring,因为我自己将 Car 编写到代码中。
此外,所有书籍都讨论了两种 DI:setter 和 constructor DI。
所以我想知道调用 ApplicationContext.getBean() 是否意味着任何类型的依赖注入和 IOC,或者根本没有 DI。
不,以这种方式获取 bean 不是依赖注入。它没有被注入。不过,该 bean 的字段可能已被注入。
有时确实没有办法解决它,但总的来说,尽量避免这种情况。
自己编写类不是 Spring,因为我自己将 Car 编写到代码中。
在这种情况下,你会得到一个NoSuchBeanDefinitionException
. 您需要告诉 Spring 它需要管理的每个类——有多种方法可以做到这一点,从自动装配到描述符中的显式定义。
getBean
确实使用与 Spring 的注入相同的配置 ( ) applicationContext
,但您的示例未使用任何依赖项注入。(好吧,Car
bean 可以注入它的依赖项,所以我们从你的例子中并不知道)。
但通常依赖注入意味着您不会自己进行任何编程设置(Car car = something)。Spring 容器将为car
您创建实例,并使用car
's setter 或它的构造函数,将注入 x 需要工作的依赖项。
我不知道为什么要尝试以这种方式获取 Car 引用...如果您想在另一个类中使用 Car 的引用,您可以像您所说的那样简单地使用 setter 或构造函数注入..如果您将其用作以上述方式,我在那里看不到任何类型的 DI。我们可以肯定地说,当您试图从应用程序上下文中获取引用时,bean 由 IOC 容器管理......