spring ioc原理_spring-IOC原理

本文详细介绍了Spring的IOC初始化过程,包括读取XML资源配置,注册BeanDefinition到BeanFactory,以及如何通过反射创建并注入依赖。在初始化完成后,非延迟加载的bean会立即初始化。此外,还提到了JDK动态代理在AOP中的应用以及BeanPostProcessor等后置处理器的作用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. 初始化IOC

初始化的过程主要就是读取XML资源,并解析,最终注册(register、refresh)到Bean Factory中

1f1e4b6c0a2e6e797e5d0d4699419d54.png

注册过程中,最核心的一句就是:this.beanDefinitionMap.put(beanName, beanDefinition),也就是说注册的实质就是以beanName为key,以beanDefinition为value,将其put到HashMap中。

2. 注入依赖

当完成初始化IOC容器后,如果bean没有设置lazy-init(延迟加载)属性,那么bean的实例就会在初始化IOC完成之后,及时地进行初始化。初始化时会先建立实例,然后根据配置利用反射对实例进行进一步操作,具体流程如下所示:

9ca53a81756af35367e4cdc230575f74.png

3、加载流程

d98ca6302a80b87e8298891f9410e8f3.png
  • BeanDefinition

将Bean的定义信息(例如类名、scope、属性、构造函数参数列表、依赖的bean、是否是单例类、是否是懒加载)存储到这个BeanDefinition相应的属性中,后面对Bean的操作就直接对BeanDefinition进行,拿到这个BeanDefinition后使用反射进行对象创建,操作等。

  • DefaultListableBeanFactory

这个就是所谓我们平常所说的 bean工厂,其父类就是 BeanFactory,BeanFactory有很多子类,DefaultListableBeanFactory就是其中一个类。其中存储beanName和BeanDefinition对应关系。

28. /** Map of bean definition objects, keyed by bean name */  
29. private final Map beanDefinitionMap = new ConcurrentHashMap(256);  
30.   
31. /** List of bean definition names, in registration order */  
32. private volatile List beanDefinitionNames = new ArrayList(256);  
  • refresh()方法来启动整个BeanDefinition的载入过程
创建容器 DefaultListableBeanFactory
创建了XmlXmlBeanDefinitionReader
开始准备通过reader来加载资源

AOP原理

动态代理:JDK动态代理是基于Java的反射机制实现的。主要涉及到java.lang.reflect包中的Proxy和InvocationHandler。即真正的代理对象由JDK再运行时为我们动态的来创建。

【后置处理器】见文章

参见:

https://blog.youkuaiyun.com/zhuyanlin09/article/details/89321939​blog.youkuaiyun.comSpringIOC初始化过程--详解 - 小毛毛--专注后端 - 博客园​www.cnblogs.com伟业:spring-后置处理器BeanPostProcessor​zhuanlan.zhihu.com
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值