spring 使用 ApplicationContex.getBean() 和 @Autowired 有什么不同?我如何决定选择哪一个?
spring what's different of using ApplicationContex.getBean() and @Autowired? How can I decide to choose which one?
我正在尝试通过阅读 broadLeaf
来学习一些 spring。
为什么有些 broadLeaf
使用 ApplictionContext.getBean() 而不是 @Autowired 注解?
示例
@Service
public class Car {
@Autowired
public Person driver;
}
@Autowired在豆车布线上受到尊重。默认构造函数 (new Car()
) 通过 Spring.
创建实例后直接填充字段
ApplictionContext.getBean()
是一样的,但是:你必须通过自己的代码来调用它。
@Autowired
等同于 @Inject
。区别不在于功能,而在于设计。 Spring 使用 @Inject
的上下文和依赖注入 (CDI) 作为控制反转 (IoC) 原则的一部分,应该是首选。这就是为什么
你好!
从根本上说,它们旨在做同样的事情,即从 spring 容器(即 ApplicationContext
)中获取 bean 以供使用。您可以认为 @Autowired
实际上会在幕后完成 ApplictionContext.getBean()
所做的工作。
不同之处在于,使用 ApplictionContext.getBean()
时,开发人员自己负责整个过程。他们必须通过使用正确的参数手动调用 getBean()
来确保获得正确的 beans .但是当使用 @Autowired
时,开发人员不需要手动执行此过程。相反,他们只需要声明他们想要什么 bean,Spring 就会为他们获取这些 bean。所以这在某种程度上是控制反转 (IOC) 的精神,因为控制上述任务的责任被反转并从开发人员转移到框架。
作为最佳实践,我们应该始终首先使用 @Autowired
。不仅更方便,更不容易出错,而且我们的领域代码不会依赖Spring框架class(即ApplictionContext
),这让我们的代码看起来更干净。
如果你遇到@Autowired
无法满足你的要求,因为你需要最大的灵活性来获取bean,那么检查ApplictionContext
是否可以帮助你。
我正在尝试通过阅读 broadLeaf
来学习一些 spring。
为什么有些 broadLeaf
使用 ApplictionContext.getBean() 而不是 @Autowired 注解?
示例
@Service
public class Car {
@Autowired
public Person driver;
}
@Autowired在豆车布线上受到尊重。默认构造函数 (new Car()
) 通过 Spring.
ApplictionContext.getBean()
是一样的,但是:你必须通过自己的代码来调用它。
@Autowired
等同于 @Inject
。区别不在于功能,而在于设计。 Spring 使用 @Inject
的上下文和依赖注入 (CDI) 作为控制反转 (IoC) 原则的一部分,应该是首选。这就是为什么
你好!
从根本上说,它们旨在做同样的事情,即从 spring 容器(即 ApplicationContext
)中获取 bean 以供使用。您可以认为 @Autowired
实际上会在幕后完成 ApplictionContext.getBean()
所做的工作。
不同之处在于,使用 ApplictionContext.getBean()
时,开发人员自己负责整个过程。他们必须通过使用正确的参数手动调用 getBean()
来确保获得正确的 beans .但是当使用 @Autowired
时,开发人员不需要手动执行此过程。相反,他们只需要声明他们想要什么 bean,Spring 就会为他们获取这些 bean。所以这在某种程度上是控制反转 (IOC) 的精神,因为控制上述任务的责任被反转并从开发人员转移到框架。
作为最佳实践,我们应该始终首先使用 @Autowired
。不仅更方便,更不容易出错,而且我们的领域代码不会依赖Spring框架class(即ApplictionContext
),这让我们的代码看起来更干净。
如果你遇到@Autowired
无法满足你的要求,因为你需要最大的灵活性来获取bean,那么检查ApplictionContext
是否可以帮助你。