Spring IOC实现思路

XML版本

核心类ClassPathXmlContextLoader的行为
  1. 读取指定.xml结尾文件的内容, 获取beanId和class属性.
  2. 创建一个Map, 将beanId作为key存入map中. 根据class的类路径, 使用反射机制加载并新建类之后, 作为value存入map.

这里涉及到急加载和懒加载的实现

  • 急加载中, 直接根据class属性使用反射加载
  • 懒加载中, value先存入class属性, 也就是类路径, 再到客户端请求的时候再使用反射
交互

1.客户端新建ClassPathXmlContextLoader加载xml文件
2.调用getBean(beanId)方法获取map当中beanId对应的value, 也就是我们的bean


Annotation版本

@ComponentScan核心步骤(IOC)
  1. 扫描指定包下所有类
  2. 判断类上是否有相对应注解, 返回class的集合
  3. 使用反射机制寻找出所有class的子包下面所有注解了@Component的类
  4. 使用反射机制初始化bean到容器中
@Resource核心步骤(DI)

1.使用反射机制, 获取当前类所有属性fields
2.判断fields是否注解了@Resource
3.默认使用属性名字作为beanId, 搜索容器中的bean
4.如果bean存在, 将bean赋值给field

  • 注意点
    在初始化完所有@Component的bean之后再初始化@Resource的属性值. 避免有些属性值获取到没有被初始化的bean, 报null
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容