我是新手,最近开始学习Spring。在spring依赖注入中,我们可以通过两种方式注入一个bean,一种是通过构造函数,另一种是通过setter方法。我的问题是,什么情况下构造函数注入更好,在什么情况下setter方法注入更好。我的重点只在哪里用?如果可能的话给我一个例子...等待您的宝贵答复..
2 回答
我会说去constructor injection
。
在某些情况下,setter injection
如果依赖是可选的。
如果你强制使用 setter 注入并使用 Spring,则使用@Required
要求 Spring 强制执行。
在所有情况下应用常识:)
还有第三种方式:现场注入。
您可以直接应用 Annotation @Resource
,@Inject
或者@Autowire
在(甚至是私有的)字段中应用。这个字段甚至不需要有一个 getter 或 setter。
如果您正在构建一个 Spring 应用程序,并且没有计划在非 Spring 应用程序或库中使用这些类,那么字段注入对于 90% 的类来说就足够了。我更喜欢它,因为它的代码更少。
当然,如果您将构造函数用于强制引用,那么在创建新实例时就无法忘记其中之一。但是(这是我的观点,这与 Alef Arendsen 在他 3 岁的 Spring 2.0 博客文章“ Setter injection vs constructor injection and the use of @Required”中的不同)你有一个 spring bean 而不是一个简单的类。而且这个bean是spring创建的,不是你直接创建的。因此,如果您使用 @Resource
,@Inject
或@Autowire
用于字段或设置器,spring 也会检查它们,并且如果不能满足所有引用,则不要将 bean 和整个应用程序投入使用。