Spring做依赖注入的方法

时间:2016-07-12 04:16:34

标签: spring dependency-injection inversion-of-control ioc-container

我在Spring Framework方面有一些经验。 Spring通常使用constructor injectionsetter injection进行DI。这个概念我很舒服。现在,除此之外,我已经看到了Spring做DI这样的事情:

@Autowired
DataSource myData;

@Resouce(name="someName")
SomeDependency dependency;

Spring使用注释进行DI时会使用什么机制? Spring在这些情况下是使用constructor还是setter注入,还是注释驱动方法完全是一种注入依赖关系的不同方式?

简单世界中的任何解释都会有很大的帮助。

1 个答案:

答案 0 :(得分:2)

您可以通过@Autowired方式进行setter注入和构造函数注入。

@Autowired
private Person person;

@Autowired
public Customer(Person person) {
    this.person = person;
}

默认情况下,TYPE通过自动连接注入bean。在场景后面,它通过java反射机制进行注入。因此,您可以使用注释配置执行相同的操作(使用xml配置完成)。

另外想要添加构造函数注入是更可取的(除了有很多参数的情况)。 构造函数注入的主要优点:

  • 你不能避免将参数传递给构造函数并在没有它们的情况下创建bean。

因此,在大多数情况下,您希望注入依赖项,而setter注入并不能保证它(您可以在错误的setter注入期间出现这种恼人的NPE)。

使用自动装配的具体规则: http://docs.spring.io/spring/docs/4.2.7.RELEASE/javadoc-api/org/springframework/beans/factory/annotation/Autowired.html