getBean流程
2022-11-02 20:23:45 5 举报
getBean流程
作者其他创作
大纲/内容
XML
构造方法是否为无参
是否使用注解标记
注意:这里父容器不是java的继承概念,而是人为设置的“组合”关系如果父亲容器属于AbstractBeanFactory则调用doGetBean否则调用getBean
单例池中没缓存,||有注册过该bean,||没设置父容器
createBean
结束
多例
N
是
从单例池中获取到,且当前为查找模式
调用其他类型的createBean
单例
bd类型
Y
1、如果设置自动选择则自动选择2、没有则默认使用无偿。3、都没有则报错
通过是否传入args来判断是创建还是查找模式
其他类型
选择指定
使用ClassPathXmlApplicationContext1、在XML中指定构造方法的参数值(手动指定)2、配置autowire=constructor让Spring自动去寻找bean做为构造方法参数值。
getSingleton(beanName,singletonFactory)
registerDependentBean
注册依赖,先获取依赖的bean
根据缓存和容器所属情况判断
getSingleton(beanName)下面单例是重载的方法。这里用三级缓存解决循环依赖问题
AnnotationConfigApplicationContextSpring会根据构造方法的参数信息去寻找bean,然后传给构造方法
是否指定构造方法
如果当前容器没有注册该bean,且有父容器。则交给父容器处理
getObjectForBeanInstance()
主要为了处理FactoryBean
是否只有一个构造方法
finishBeanFactoryInitialization->preInstantiateSingletons->getBean->doGetBean
重载方法getSingleton只是把可以获取对应bean的单例工厂放入缓存中。等需要用时去缓冲获取工厂调用回调方法creatBean。懒加载对象
- 问题:开发者可以通过什么方式来指定使用哪个构造方法呢? - 答案: - xml可以设置构造方法参数 - @Autowired注解设置到需要的构造方法上,Spring通过byType+byName的方式去找到符合条件的bean作为构造方法的参数值
推断构造方法
否
注解
实例化就只能使用这个构造方法
0 条评论
下一页