2010-09-16 44 views
16

我想知道spring如何依赖注入。我想要使​​用的低级逻辑。依赖注入在Spring中如何工作?

更新:

我想知道的对象引用是如何注入到构造函数或setter方法,它是通过反射或某些字节代码的水平。

+5

您可以阅读代码,因为它是开源的。 – 2010-09-16 09:58:34

+0

@Preet无论如何,我正在阅读它。我只想要一个概述。 – 2010-09-16 09:59:31

+2

“我在别处得到答案,答案是字节码检测。” - 不,这不对。 95%的Spring使用Reflection API。字节代码检测仅用于特定类型的注入,如方法查找注入。 – 2010-09-17 10:31:04

回答

9

依赖的配置从XML,注释或Java DSL(JavaConfig)读取。然后,Spring DI引擎使用Java反射API根据配置中的元数据连接依赖项。

+2

我想知道,它是如何连接的依赖。 – 2010-09-16 10:11:42

+1

使用Java反射API。我将这些信息添加到答案中。 – 2010-09-16 10:53:50

+1

使用Java反射API,Spring会理解它必须在该特定点处插入一个依赖项,但是如何精确插入这个依赖项?这是一些字节码级别的变化? – flash 2013-05-06 05:39:11

13

Java组件/类应尽可能独立于其他Java类。这增加了重用这些类并独立于其他类进行测试的可能性(单元测试)。为了将Java组件与其他Java组件分离,对某个其他类的依赖关系应该被注入到它们中,而不是该类本身创建/查找该对象。

如果类A使用类B作为变量,则类A对类B具有依赖性。

如果使用依赖注入,则类B通过类A的构造函数被赋予类A - 这被称为构造注入;或通过setter - 这被称为setter注入

依赖注入的一般概念被称为控制反转。一个班不应该配置自己,但应该从外部进行配置。

基于独立类/组件的设计提高了重用性和测试软件的可能性。例如,如果A类希望Dao(数据访问对象)用于接收来自数据库的数据,则可以轻松创建另一个测试对象,该对象嘲笑数据库连接,并将此对象注入到A中以测试A而无需实际的数据库连接。

基于标准Java的依赖注入的软件设计是可能的。

Spring通过提供一种提供配置的标准方式和管理对创建对象的引用来增加使用依赖注入的一些简化。

更多阅读this

EDIT1

春初始化它的上下文它创建定义在Spring应用程序context.xml文件渴望所有的豆类。 现在假设你的Bean A具有B的依赖关系,那么B的Obj已经与Spring一起,因为它在Spring初始化时已经成功创建。然后Spring会在A类中搜索setter方法,并在那里设置B的Obj。

EDIT2:

Please read 5.4.1 Setter Injection

+0

为什么-1 ??? ???? – 2010-09-16 10:13:07

+2

我在问:“你是怎么注入构造函数的” – 2010-09-16 10:19:52

+0

@Suresh S编辑 – 2010-09-16 10:25:22