java tood注释_springboot分析六 如何把加了@Bean注解的类注入到ioc容器

@Bean的加载流程

再执行SpringApplication对象的run方法时 执行 refreshContext方法

763c16f8b98c44589fad0be684e74fc6.png

ecc9853d4ce1705d708e7e931c49602d.png

cad76609b04362f834b331acbd1b7b0e.png

0ffbe00aa18d7d53112148abe28ae55c.png

d3bba9797e521e8881f26e30a7ead3a0.png

c130816c95219f03b903ff1dd76bb57f.png

202eb72e274c1dc07b61f26e1056e18d.png

会执行 ConfigurationClassPostProcessor类的 postProcessBeanDefinitionRegistry方法

a199d685ed8e6d3cd669fa6cc3fd1cb8.png

ab41b916cb9f45a125321c05d180e7ee.png

aa6801ee61e33e891c0bb2a41372a16c.png

e39770d247c9cfeab5fa6aa6ed2ed729.png

7a6d9f3690baec366dc6a5b343a52962.png

ConfigurationClassParser#retrieveBeanMethodMetadata(sourceClass)方法会拿到当前类中所有加了@Bean注解的方法

2c45c2706e61e36498f97f642e35a730.png

再把上面拿到的所有@Bean注解的方法  放到ConfigurationClass对象的beanMethods属性里

f469ef11564f8b0e917fac52d029aaaf.png

把方法放到beanMethods里之后 执行ConfigurationClassPostProcessor#processConfigBeanDefinitions方法中的this.reader.loadBeanDefinitions(configClasses);把configClass对象加载到beanDefinitionMap中

13b99653d50b1c8a6624587edb6a3f40.png

3b8fc62ebf6e5d3f9a89f0dd92080ed2.png

从上面放到ConfigurationClass对象的beanMethods属性里  取出所有的beanMeathod方法 进行循环遍历

2ead79625851723e917e3e78119a3a4d.png

执行ConfigurationClassBeanDefinitionReader#loadBeanDefinitionsForBeanMethod方法 默认使用方法名作为beanDefinitionMap的key

如果@Bean注解中 给bean起了名字(@Bean(“123”))  beanDefinitionMap的key就使用起的名字(123)

46f041e5ec0c62d7b3ab3f0101152bc2.png

最后调用ConfigurationClassBeanDefinitionReader#loadBeanDefinitionsForBeanMethod方法中的this.registry.registerBeanDefinition(beanName, beanDefToRegister);  把beanMethod 注入到beanDefinitionMap中

e26fc23a7fbc1bd2025382f3f7b2c2ba.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值