正文共:2223 字 48 图
预计阅读时间: 6 分钟
昨天文章讲了 @Resource 的注入方式,今天我们来看下源码中 @Resource 默认是怎么自动注入属性的。本文图贼多,慎入。
对 SpringTest 类做了一点改动,不过效果是一样的。默认情况下 beanName userDao 不存在 spring.xml 配置中。我们就从这里开始一步步深入源码,查看 Spring 是如何完成依赖查找并自动注入的。
重点关注 refresh 方法,下面看看具体实现
此方法是 Spring 容器启动的核心方法,但是我们的重点是 finishBeanFactoryInitialization 方法,此方法负责实例化所有的单例 bean,懒加载的 bean 除外。下面看看具体实现
虽然内容很多,但是我们不需要都看,只用暂时先关注我们需要的方法。beanFactory.preInstantiateSingletons。
beanFactory.preInstantiateSingletons 方法会遍历 Spring 容器中所有的 beanName,经过逻辑判断,获得 beanName 对应的 bean 实例。如上图,经过判断调用 AbstractBeanFactory.getBean 方法获取 bean 实例。
上一篇文章 @Resource 真的是 byName 吗?
项目结构如下图
对 SpringTest 类做了一点改动,不过效果是一样的。默认情况下 beanName userDao 不存在 spring.xml 配置中。我们就从这里开始一步步深入源码,查看 Spring 是如何完成依赖查找并自动注入的。
重点关注 refresh 方法,下面看看具体实现
此方法是 Spring 容器启动的核心方法,但是我们的重点是 finishBeanFactoryInitialization 方法,此方法负责实例化所有的单例 bean,懒加载的 bean 除外。下面看看具体实现
虽然内容很多,但是我们不需要都看,只用暂时先关注我们需要的方法。beanFactory.preInstantiateSingletons。
beanFactory.preInstantiateSingletons 方法会遍历 Spring 容器中所有的 beanName,经过逻辑判断,获得 beanName 对应的 bean 实例。如上图,经过判断调用 AbstractBeanFactory.getBean 方法获取 bean 实例。




































上一篇文章 @Resource 真的是 byName 吗?
