2013-03-14 73 views
3

我是一个新手,我最近开始学习Spring.in春天依赖注入,我们 可以注入一个bean的方式有两种,一种是通过另一个是通过 setter方法。我的问题是,对于什么情况构造方法注入更好,并且对于什么情况setter方法注入更好。我只关注在哪里使用? 给我一个例子,如果可能的话...等待你的宝贵回复。什么时候去构造函数注入和什么时候去参数注入Spring

+2

[这](HTTP:// blog.springsource.com/2007/07/11/setter-injection-versus-constructor-injection-and-the-use-of-required/)将帮助你... :) – 2013-03-14 05:18:04

+0

http://misko.hevery。 com/2009/02/19/constructor-injection-vs-setter-injection/ – Shashi 2013-03-14 05:19:44

回答

2

还有第三种方法:场喷射。

您可以在(甚至私人)字段直接应用注释@Resource@Inject@Autowire。这个领域甚至不需要拥有一个吸气者或者设置者。

如果您正在构建Spring应用程序,并且没有计划在非Spring应用程序或库中使用这些类,那么对于90%的类来说,字段注入就足够了。 我更喜欢它,因为它代码少。

当然,如果您使用强制引用的构造函数,那么创建新实例时就无法忘记其中的一个。但是(这是我的观点,与Alef Arendsen在他3年前的Spring 2.0博客文章“Setter injection versus constructor injection and the use of @Required"”中有所不同),你有一个spring bean,而不是一个简单的类,而这个bean是由spring创建的,而不是由你直接创建的所以,如果你使用@Resource@Inject@Autowire的属性或者setter春季检查他们太不把豆和服务的整个应用程序如果不是所有的引用可满足

+0

我想知道你会如何在@私有字段中使用@Inject对一个类进行单元测试.. – 2013-03-21 09:16:10

+0

@ denis.solonenk我使用一个Util创建了mock并为所有标有'@ Resource','@ Inject',给定对象的'@ Autowire'。 - 这个工具是为开源设计的,不幸的是我没有找到发布它的时间。 – Ralph 2013-03-21 12:10:44

2

我想说的去constructor injection

在某些情况下,如果依赖项是可选的,则为setter injection

如果您强制使用setter注入并使用Spring,请使用@Required来要求Spring强制执行它。

在所有情况下应用常识:)

+0

感谢您的回答 – 2013-03-14 06:04:13

+0

@Arun接受此答案,如果这是您要求的。 – nav0611 2013-03-14 06:20:45

相关问题