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

注册过程中,最核心的一句就是:this.beanDefinitionMap.put(beanName, beanDefinition),也就是说注册的实质就是以beanName为key,以beanDefinition为value,将其put到HashMap中。
2. 注入依赖
当完成初始化IOC容器后,如果bean没有设置lazy-init(延迟加载)属性,那么bean的实例就会在初始化IOC完成之后,及时地进行初始化。初始化时会先建立实例,然后根据配置利用反射对实例进行进一步操作,具体流程如下所示:

3、加载流程

- 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/89321939blog.youkuaiyun.comSpringIOC初始化过程--详解 - 小毛毛--专注后端 - 博客园www.cnblogs.com伟业:spring-后置处理器BeanPostProcessorzhuanlan.zhihu.com