【问题标题】:Is the call ApplicationContext.getBean() in Spring using dependency injection?Spring 中的调用 ApplicationContext.getBean() 是否使用依赖注入?
【发布时间】:2013-02-12 09:28:23
【问题描述】:

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

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

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

此外,所有的书都谈到了两种 DI:setter 和 constructor DI。

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

【问题讨论】:

    标签: java spring


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        【解决方案3】:

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

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

        【讨论】:

          【解决方案4】:

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

          【讨论】:

            猜你喜欢
            • 2011-10-27
            • 1970-01-01
            • 2021-02-24
            • 2013-02-10
            • 2011-09-30
            • 2015-05-12
            • 1970-01-01
            • 2014-12-03
            • 2015-10-04
            相关资源
            最近更新 更多