@Autowire 注解是如何工作的

113 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第12天,点击查看活动详情

注解Autowire 的深入理解

在上一篇文章中我们说明了三种可以在类中标记@Autowire 注解的合适的位置,标注注解之后,我们就希望这些被标注的依赖能够被注入到这个类中。但是,仅仅一个标注,并不能让Spring IOC 容器聪明到可以自己去查看这些注解,然后为相应的类注入符合条件的依赖对象。

最基本的,Spring 需要以某种方式去了解,哪些对象标注了@Autowire 注解,同时要了解哪些对象是可以作为一个被依赖的对象去注入给需要它们的对象中。

在考虑Spirng 容器是如何实现上述功能之前,我们需要先想一想,原有的自动绑定功能和使用Autowire 注解之间的差别。

使用xml 文件进行自动绑定的时候,我们会将所有的bean 定义配置到配置文件中去,然后使用default-autowire 或者autowire 告知容器,使用这两种属性指定绑定方式,把容器中各个对象都绑定到一起去。

在使用了@Autowire 注解之后,在xml 文件中的default-autowire 或者autowire 的职责就转交给了@Autowire 注解,所以对于xml 配置文件,现在就仅仅剩下了简单的bean 的定义而已。

spring 的机制就是,需要给每个bean 定义对应的实例注入相关的依赖,那么就可以遍历这些bean 定义,通过反射,检查每个bean 定义对应的类中,是否有@Autowire 注解。

如果存在这个注解的话,那么就可以从当前容器管理的对象中获取到符合条件的对象,然后设置给标注了@Autowire 注解所标注的属性,或者方法参数中去。

通过这种方式,就完成了“依赖注入”的功能。

总结

这篇文章我们相当于初步地对@Autowire 注解的实现原理进行了深入的讲解。读者可以好好思考一下,这种方式有什么便捷方式,或者说有什么不足之处。