我想确定我是否理解正确。 Spring需要一个setter来注入字段引用吗?仅仅将它作为一个公共领域来检测它是不是可以做到的?
有替代方案吗?据我所知,Java EE的@Inject注释可以毫无问题地完成。但我一直更倾向于春天。
这取决于你是如何创建bean的。 Spring不需要setter。还有很多其他方法:
公共字段(如你所建议的)可能会起作用,虽然我从来没有尝试过,并且即使它确实也反对它。
不幸的是,XML方法没有考虑私有领域(我知道)。您需要添加setter,使用构造函数或设置某种自动装配。
请记住,自动装配可以与XML结合使用。即使您通过xml创建bean(与@Component和组件扫描相反),Spring也会关注您的布线注释。
没有必要让Setter注入引用,你可以在类的公共变量或setter方法上使用Autowire,你也可以使用constructor-arg注入bean,这是一种注入依赖关系和自动装配的好方法。也在构造函数上完成。 @inject也具有与@autowired相同的功能,但@Autowired还有一个额外的行为,它在内部也使用@required属性,以查看bean是否有引用并正确注入。
除了二次注射外,Spring还为DI提供了几种替代方案。例如,您可以使用constructor injection。或者,您可以使用Spring的@Autowired注释进行构造函数,字段或setter注入。既然你提到了它,我想你也会对知道Spring支持@Inject注释感兴趣。