Spring 进行依赖注入的方式
Ways in which Spring do Dependency Injection
我在 Spring 框架方面有一些经验。 Spring 通常使用 constructor injection
或 setter injection
进行 DI。这个概念我很舒服。现在,除此之外,我还看到 Spring 像这样进行 DI:
@Autowired
DataSource myData;
或
@Resouce(name="someName")
SomeDependency dependency;
Spring在使用注解做DI的时候利用了什么机制? Spring 在这些情况下是否使用 constructor
或 setter
注入,或者注解驱动方法完全是一种不同的依赖注入方式?
简单世界中的任何解释都会有很大帮助。
您可以通过@Autowired
方式进行setter注入和构造函数注入。
@Autowired
private Person person;
@Autowired
public Customer(Person person) {
this.person = person;
}
默认情况下按类型自动装配注入 bean。在幕后,它通过 java 反射机制进行注入。所以你可以用注释配置做同样的事情(你用 xml 配置完成的)。
另外想补充一点,构造函数注入更可取(除了参数太多的情况)。
构造函数注入的主要优点:
- 您无法避免将参数传递给构造函数并在没有它们的情况下创建 bean。
所以在大多数情况下,您希望注入依赖项,而 setter 注入并不能保证这一点(您可能会在错误的 setter 注入期间出现这个恼人的 NPE)。
我在 Spring 框架方面有一些经验。 Spring 通常使用 constructor injection
或 setter injection
进行 DI。这个概念我很舒服。现在,除此之外,我还看到 Spring 像这样进行 DI:
@Autowired
DataSource myData;
或
@Resouce(name="someName")
SomeDependency dependency;
Spring在使用注解做DI的时候利用了什么机制? Spring 在这些情况下是否使用 constructor
或 setter
注入,或者注解驱动方法完全是一种不同的依赖注入方式?
简单世界中的任何解释都会有很大帮助。
您可以通过@Autowired
方式进行setter注入和构造函数注入。
@Autowired
private Person person;
@Autowired
public Customer(Person person) {
this.person = person;
}
默认情况下按类型自动装配注入 bean。在幕后,它通过 java 反射机制进行注入。所以你可以用注释配置做同样的事情(你用 xml 配置完成的)。
另外想补充一点,构造函数注入更可取(除了参数太多的情况)。 构造函数注入的主要优点:
- 您无法避免将参数传递给构造函数并在没有它们的情况下创建 bean。
所以在大多数情况下,您希望注入依赖项,而 setter 注入并不能保证这一点(您可能会在错误的 setter 注入期间出现这个恼人的 NPE)。