Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/368.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 依赖注入是如何工作的?_Java_Spring_Dependency Injection - Fatal编程技术网

Java 依赖注入是如何工作的?

Java 依赖注入是如何工作的?,java,spring,dependency-injection,Java,Spring,Dependency Injection,我正在读ProSpring2.5的书,我有一个关于依赖注入如何工作的问题 我了解BeanFactory并进行依赖项查找。现在我读了关于依赖注入的文章,我有一些问题。根据我的理解,您希望将查找限制到最小值,例如查找用于引导应用程序的对象。然后依赖注入将处理其余部分。但是我不明白这是怎么回事 假设你有一个beanfactory,你会得到一个MyApplication实例来启动整个应用程序。其余的对象使用依赖项注入来获取它们的协作者。beanfactory维护它所管理的bean列表,但是这个工厂不是只

我正在读ProSpring2.5的书,我有一个关于依赖注入如何工作的问题

我了解BeanFactory并进行依赖项查找。现在我读了关于依赖注入的文章,我有一些问题。根据我的理解,您希望将查找限制到最小值,例如查找用于引导应用程序的对象。然后依赖注入将处理其余部分。但是我不明白这是怎么回事


假设你有一个beanfactory,你会得到一个MyApplication实例来启动整个应用程序。其余的对象使用依赖项注入来获取它们的协作者。beanfactory维护它所管理的bean列表,但是这个工厂不是只在应用程序的主方法中可用吗?如果beanfactory也管理其包含bean的范围,我不明白这是如何做到的。beanfactory在某种程度上是全球性的吗?

因此,有两种方式可以实现这一点(从Spring 3开始)。在“传统”依赖项注入中,bean工厂只能将依赖项注入到它自己创建的bean中。在这个场景中,bean工厂将在第一次创建bean时解析并注入该bean的所有依赖项


另一种方法要求使用“完整”AspectJ进行加载或编译时编织。在这个场景中,您在spring-aspects.jar中使用了一个方面,它基本上切入了所有
new
操作,允许您在任意创建的对象中获得依赖注入。这是通过使用
@可配置
注释触发的。您可以阅读更多内容。

因此,有两种方法可以实现这一点(从Spring 3开始)。在“传统”依赖项注入中,bean工厂只能将依赖项注入到它自己创建的bean中。在这个场景中,bean工厂将在第一次创建bean时解析并注入该bean的所有依赖项


另一种方法要求使用“完整”AspectJ进行加载或编译时编织。在这个场景中,您在spring-aspects.jar中使用了一个方面,它基本上切入了所有
new
操作,允许您在任意创建的对象中获得依赖注入。这是通过使用
@可配置
注释触发的。您可以阅读更多内容。

bean工厂实例化所有对象。它解析您的配置(xml或注释),实例化bean并设置它们的依赖关系。然后,所有这些bean都存储在应用程序上下文中

您通常有一个应用程序的入口点,在这里您可以使用
context.getBean(..)
。现在bean已经注入了它的依赖项,因为它是由bean工厂放在上下文中的


可能会澄清问题的经验法则是:在使用DI框架时,永远不要使用
new
操作符(带bean类)。框架生成实例,而不是您。

bean工厂实例化所有对象。它解析您的配置(xml或注释),实例化bean并设置它们的依赖关系。然后,所有这些bean都存储在应用程序上下文中

您通常有一个应用程序的入口点,在这里您可以使用
context.getBean(..)
。现在bean已经注入了它的依赖项,因为它是由bean工厂放在上下文中的


可能会澄清问题的经验法则是:在使用DI框架时,永远不要使用
new
操作符(带bean类)。框架生成的是实例,而不是您。

控制反转和依赖注入的要点是,您(通常)不需要beanfactory,只需要启动应用程序。依赖项“自动出现”在对象中。这基本上适用于在应用程序的整个生命周期中只有很少(通常只有一个)实例的对象

例如,如果您的MyApplication依赖于MyModuleA的实例,您只需将其@Autowired即可。当您在开始时从beanfactory获取应用程序对象时,它已经带有MyModuleA预置的实例

关于作用域:这来自web上下文。除了只有一个实例的对象之外,您还可以将对象的范围限定到用户的会话。在那里,您可以存储需要保存的信息,这些信息可以保存在多个请求中,但对于不同的用户是分开的,比如:购物车


通常将bean工厂视为全局的。我认为有几个实例是可能的,但它们会断开连接,不能注入只有其他实例知道的对象。

控制反转和依赖注入的要点是,除了启动应用程序,您(通常)不需要beanfactory。依赖项“自动出现”在对象中。这基本上适用于在应用程序的整个生命周期中只有很少(通常只有一个)实例的对象

例如,如果您的MyApplication依赖于MyModuleA的实例,您只需将其@Autowired即可。当您在开始时从beanfactory获取应用程序对象时,它已经带有MyModuleA预置的实例

关于作用域:这来自web上下文。除了只有一个实例的对象之外,您还可以将对象的范围限定到用户的会话。在那里,您可以存储需要保存的信息,这些信息可以保存在多个请求中,但对于不同的用户是分开的,比如:购物车


通常将bean工厂视为全局的。我认为可能会有几个实例,但它们会断开连接,并且不能注入只有其他实例才知道的对象。

因此,“启动”应用程序的bean现在有一个寄存器,可以在其中获取注入了依赖项并准备好使用的bean?是的。例如,在web上下文中,上下文(注册表)由spring提供的侦听器启动,您看不到。因此,“启动”应用程序的bean现在有一个寄存器,可以从中获取bea