加载过程
参考内容
五月的仓颉,Spring源码分析的很详细
https://www.cnblogs.com/xrq730/p/6285358.html
- 入口
1 ApplicationContext ac = new ClassPathXmlApplicationContext("spring.xml");
2 ac.getBean(XXX.class);
- 这里第一步是装载bean到容器中,核心方法ClassPathXmlApplicationContext/refresh()
refresh()方法中的finishBeanFactoryInitialization()方法需要getbean()完成bean的加载。 - 第二步是从容器中取出bean. 核心方法
AbstractBeanFactory/doGetBean()
- 构造方法完成bean的加载
总结
主要就是两方面的一个宏观认识
-
bean的创建
IOC就是一个bean的集合,bean的创建也由他负责,那么什么时候创建,怎么创建bean?
需要考虑bean的scope,一种singleton,一种prototype;还有是延迟加载属性
singleton就是只创建一次,会放到一个map中,以便下次使用;prototype就是每次都创建一个新的实例 -
bean的属性注入
也一样,什么时候注入,怎么注入
在创建bean之后,先找到需要注入的属性,也就是@Autowired注解的方法,或者属性
方法就需要调用,属性就需要修改值
整体的思路很简单,只是为了满足丰富的功能,以及符合设计原则,代码复杂得多。还需要抽丝剥茧,一层一层深入
网友评论