2016-11-30 87 views
0

我用@Autowired注释是这样的:@Autowired注释是否正确使用?

@Autowired 
private MyService1 myService1; 

@Autowired 
private MyService2 myService2; 

但是,新的IntelliJ IDE 2016(3)建议,并提出更换:

private final MyService1 myService1; 
private final MyService2 myService2;; 

@Autowired 
public MyClass(MyService1 myService1, MyService2 myService2) { 
    this.myService1= myService1; 
    this.myService2= myService2; 
} 

告诉我有什么区别,什么是正确的?

+1

[Setter DI与Spring中构造函数DI的可能重复?](http://stackoverflow.com/questions/7779509/setter-di-vs-constructor-di-in-spring) – Jesper

回答

1

两种方法都是正确的。

从包括docs

春天,提供一种机制,确保所有相关性,当您使用Setter注入定义,但是通过使用构造器注入,你断言的依赖性要求在容器不可知的方式“

@Autowire构造级别保证,你将拥有所有必需的依赖关系,当你的Spring容器终于创造你的这个类的bean。

1

这是建议使用构造函数注入而不是Setter注入。对于正常使用,没有什么大不同。

我们通常建议人们使用所有强制合作者的构造函数注入和所有其他属性的setter注入。同样,构造器注入确保所有强制属性都得到满足,并且实例化处于无效状态的对象(未通过其协作者)是不可能的。换句话说,当使用构造函数注入时,您不必使用专用机制来确保设置所需的属性(除了普通的Java机制)。

下面是一篇文章,解释它Setter injection versus constructor injection and the use of @Required

而且你可以在计算器相当多的问题/答案。 Setter DI vs. Constructor DI in Spring?

0

是的,它使用正确。这被称为构造函数注入。

构造函数注入允许您使用您所选择的final修饰符,并轻松传递您自己的未由Spring对象管理的对象(例如,mock)。

如果您不是被迫使用现场注入,请选择构造函数注入。

相关问题