我在Spring Framework方面有一些经验。 Spring通常使用constructor injection
或setter injection
进行DI。这个概念我很舒服。现在,除此之外,我已经看到了Spring做DI这样的事情:
@Autowired
DataSource myData;
或
@Resouce(name="someName")
SomeDependency dependency;
Spring使用注释进行DI时会使用什么机制? Spring在这些情况下是使用constructor
还是setter
注入,还是注释驱动方法完全是一种注入依赖关系的不同方式?
简单世界中的任何解释都会有很大的帮助。
答案 0 :(得分:2)
您可以通过@Autowired
方式进行setter注入和构造函数注入。
@Autowired
private Person person;
@Autowired
public Customer(Person person) {
this.person = person;
}
默认情况下,TYPE通过自动连接注入bean。在场景后面,它通过java反射机制进行注入。因此,您可以使用注释配置执行相同的操作(使用xml配置完成)。
另外想要添加构造函数注入是更可取的(除了有很多参数的情况)。 构造函数注入的主要优点:
因此,在大多数情况下,您希望注入依赖项,而setter注入并不能保证它(您可以在错误的setter注入期间出现这种恼人的NPE)。