Spring 春天什么';使用ApplicationContex.getBean()和@Autowired有什么不同?我如何决定选择哪一个?
我想通过阅读Spring 春天什么';使用ApplicationContex.getBean()和@Autowired有什么不同?我如何决定选择哪一个?,spring,annotations,javabeans,broadleaf-commerce,Spring,Annotations,Javabeans,Broadleaf Commerce,我想通过阅读阔叶来学习一些春天的知识 为什么一些broadLeaf使用ApplictionContext.getBean()而不是@Autowired annotation?示例 @Service public class Car { @Autowired public Person driver; } @自动布线在Bean Car的布线中得到尊重。默认构造函数(new Car())通过Spring创建实例后,该字段将直接填充 ApplictionContext.getBean()
阔叶
来学习一些春天的知识
为什么一些broadLeaf
使用ApplictionContext.getBean()而不是@Autowired annotation?示例
@Service
public class Car {
@Autowired
public Person driver;
}
@自动布线在Bean Car的布线中得到尊重。默认构造函数(new Car()
)通过Spring创建实例后,该字段将直接填充
ApplictionContext.getBean()
是一样的,但是:您必须用自己的代码调用它
@Autowired
与@Inject
相同。区别不在于功能,而在于设计。Spring使用@Inject
的上下文和依赖项注入(CDI)作为控制反转(IoC)原理的一部分,应该是首选。这就是为什么你好!
基本上,它们的目的是做同样的事情,从spring容器(即ApplicationContext
)获取一个bean来使用。您可以认为,@Autowired
将实际完成ApplictionContext.getBean()
幕后的工作
区别在于,当使用applicationcontext.getBean()
时,开发人员自己负责整个过程。他们必须确保通过使用正确的参数手动调用getBean()
来获得正确的bean。但当使用@Autowired
时,开发人员不需要手动执行此过程。相反,他们只需要声明他们想要什么bean,Spring就会为他们获得这些bean。这就是控制反转(inversionofcontrol,IOC)的精神,因为控制上述任务的责任被倒置,并从开发人员转移到了框架中
作为最佳实践,我们应该始终首先使用@Autowired
。它不仅更方便,更不容易出错,而且我们的域代码将不依赖于Spring框架类(即ApplictionContext
),这使我们的代码看起来更干净
如果您遇到的情况是,
@Autowired
无法满足您的需求,因为您需要有最大的灵活性来获得一个bean,那么请检查applicationcontext
当时是否可以帮助您。这可能是我遇到的最好的解释。非常感谢。