大家都知道在spring中bean对象的生成分两类一类是预加载,也就是说在容器初始化的时候把bean注入生成的事情一起干了。另一类是需要开发者主动调用getBean来获取bean对象。
1.预加载函数截图如下
通过上面的代码来看,什么样的bean可以被预加载呢?需要满足以下条件:1.不能是抽象类 2.需要是单例 3.懒加载属性值要为false
不管是预加载还是自己手动调用的加载,都是调用getBean 接口来加载bean,所以理解getBean是了解bean IOC的关键,来看个流程图。
1。我们一般使用getBean时候,只传入bean id的名字。
- doGetBean
首先是转换下beanname :1 是不是以&开头,如果是进行相关处理。2 查看是否有别名,如果有返回别名,没有返回自己。
其次,从单例bean实例对象的hashmap中查找有没有已经存在的bean对象,如果有则返回对象,如果没有继续判断是不是单例工厂(ObjectFactory