spring 使用 ApplicationContex.getBean() 和 @Autowired 有什么不同?我如何决定选择哪一个?

use*_*808 2 spring annotations javabeans broadleaf-commerce

我试图通过阅读来了解一些春天broadLeaf

为什么有些人broadLeaf使用 ApplictionContext.getBean() 而不是 @Autowired 注释?

Ken*_*han 5

\xe4\xbd\xa0\xe5\xa5\xbd!

\n\n

从根本上来说,它们的目的是做同样的事情,即从 spring 容器(即 )中获取 BeanApplicationContext来使用。您可以认为这实际上会完成幕后@Autowired完成的工作。ApplictionContext.getBean()

\n\n

不同之处在于,使用时ApplictionContext.getBean(),开发人员自己负责整个过程。他们必须通过使用正确getBean()的参数手动调用来确保获得正确的bean。但在使用时@Autowired,开发人员不需要手动执行此过程。相反,他们只需要声明他们想要什么 bean,Spring 就会为他们获取这些 bean。因此,这在某种程度上是控制反转(IOC)的精神,因为控制上述任务的责任被反转并从开发人员转移到了框架。

\n\n

作为最佳实践,我们应该始终@Autowired首先使用。不仅更加方便,不易出错,而且我们的领域代码不会依赖于Spring框架类(即ApplictionContext),这使得我们的代码看起来更加干净。

\n\n

如果您遇到@Autowired无法满足您的要求的情况,因为您需要最大的灵活性来获取 Bean,那么请检查ApplictionContext当时是否可以帮助您。

\n