Java 在简单的外行中';getBean在春天做什么?

Java 在简单的外行中';getBean在春天做什么?,java,spring,Java,Spring,考虑这样一行代码 AutomobileDriver ad=(AutomobileDriver)appContext.getBean("increaseSpeed"); 假设有一个IncreaseSpeed类继承自AutomobileDriver类 getBean做什么?它的主要功能是什么 在Spring中,您可以定义一个bean并给它一个id。通常,Spring希望您使用依赖注入来访问bean。然而,Spring提供了getBean,作为通过其id访问bean的另一种方式 基本上,您的代码将返

考虑这样一行代码

AutomobileDriver ad=(AutomobileDriver)appContext.getBean("increaseSpeed");
假设有一个
IncreaseSpeed
类继承自
AutomobileDriver


getBean
做什么?它的主要功能是什么

在Spring中,您可以定义一个bean并给它一个id。通常,Spring希望您使用依赖注入来访问bean。然而,Spring提供了
getBean
,作为通过其id访问bean的另一种方式


基本上,您的代码将返回一个id为“increaseSpeed”的bean实例。

bean是一个提供一些功能的组件,bean的名称表示它将是increaseSpeed

这些组件在名为“应用程序上下文”的上下文中注册,可以按名称查找。因此,如果你想提高速度,看看你的应用程序上下文中有什么可以做到这一点

更多技术:


此代码正在从Spring应用程序上下文请求名为
increaseSpeed
的bean。将应用程序上下文视为可用对象池,这些对象已从Spring配置XML中配置。当应用程序上下文启动时,它会在配置中创建bean。这个电话只是询问已经在那里的那个。应用程序上下文以
java.lang.Object
的形式返回此“bean”,因此必须将其转换为适当的类型

您可能会将此调用视为Spring应用程序中的入口点。要从应用程序上下文中取出第一个对象,需要进行此调用。从应用程序上下文中,此对象可能有到Spring注入的其他对象的链接。

在“简单的外行术语”中:

  • 这假设Spring被告知创建一个对象实例(可能在XML配置文件中),该实例(由Spring)标识为id为“increaseSpeed”,并且其类或父类为
    AutomobileDriver

  • 您请求Spring上下文引用(a)默认情况下,先前创建的对象(称为singleton)或(b)该对象的新实例(prototype)


  • 这仍然是控制反转,因为实现是在别处决定的。这需要更多的体力劳动,但概念上是一样的。@DaveNewton不完全一样,因为应用程序知道IOC容器。在经典的IOC场景中,bean不知道依赖项来自何处。