【发布时间】:2012-10-12 22:16:28
【问题描述】:
我想确定我是否理解正确。 Spring需要一个setter来注入一个字段引用?仅仅将其检测为公共字段就不能做到吗?
是否有替代方案。据我了解,Java EE 的 @Inject 注释可以毫无问题地做到这一点。但我一直更倾向于 Spring。
【问题讨论】:
标签: java spring inversion-of-control setter getter
我想确定我是否理解正确。 Spring需要一个setter来注入一个字段引用?仅仅将其检测为公共字段就不能做到吗?
是否有替代方案。据我了解,Java EE 的 @Inject 注释可以毫无问题地做到这一点。但我一直更倾向于 Spring。
【问题讨论】:
标签: java spring inversion-of-control setter getter
这取决于您创建 bean 的方式。 Spring 不需要设置器。还有很多其他方法:
公共领域(如您所建议的)可能会起作用,尽管我从未尝试过,并且即使这样做也会建议不要这样做。
不幸的是,XML 方法不考虑私有字段(据我所知)。您要么需要添加一个 setter,使用构造函数,要么设置某种自动装配。
请记住,自动装配可以与 XML 结合使用。即使您通过 xml 创建 bean(与 @Component 和组件扫描之类的东西相反),Spring 也会注意您的接线注释。
【讨论】:
不需要Setter来注入引用,你可以在类的公共变量或setter方法上使用Autowire,你也可以使用constructor-arg注入bean,这是注入依赖的好方法和自动装配也可以在构造函数上完成。 @inject 也具有与@autowired 相同的功能,但是@Autowired 有一个额外的行为,它在内部也使用@required 属性,以查看bean 是否具有引用并正确注入。
【讨论】:
除了 setter 注入之外,Spring 还为 DI 提供了几种替代方案。例如,您可以使用constructor injection。或者,您可以将 Spring 的 @Autowired 注释用于构造函数、字段或 setter 注入。既然你提到了它,我想你也会有兴趣知道 Spring 支持 @Inject 注释。
【讨论】: