在Spring中使用依赖注入调用ApplicationContext.getBean()吗?

时间:2013-02-12 09:28:24

标签: java spring

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

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

在课堂上解决问题不是春天,因为我自己将Car写入了代码。

此外,所有的书都谈到了两种DI:setter和构造函数DI。

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

4 个答案:

答案 0 :(得分:1)

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

有时候真的没办法,但总的来说,尽量避免这种情况。

答案 1 :(得分:0)

  

在课堂上解决问题不是春天,因为我自己将Car写入了代码。

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

答案 2 :(得分:0)

getBean确实使用与Spring注入相同的配置(applicationContext),但是您的示例没有使用任何依赖注入。 (那么Car bean可以注入它的依赖项,所以我们真的不知道你的例子。)

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

答案 3 :(得分:0)

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