前置工作
一,建demo
建了一个配置类testConfiguration配置文件,用于将配置文件里面的值注入给类giao
这是
@PropertySource注解导入的配置文件
这是
giao类,通过@ConfigurationProperties注解分别给giao里面的hh属性,和name属性赋值
在启动类里面从容器里面获取这两个
Bean再通过get方法获取属性值
可以看到控制台打印出了两个属性值
二,开始探究
首先我们需要打断点,在哪里打断点,这个也是有讲究的,就走构造方法里面打断点就好了,再看debug里面的帧或者线程,就能知道代码是如何一步一步的走到这里来的
众所周知,启动
springboot项目的时候会调用run方法,在run方法里面会调用refresh方法去刷新容器,最终会调用AbstractApplicationContext这个类里面的refresh方法去刷新容器,加载Bean,而this.invokeBeanFactoryPostProcessors这个方法就是解析@Bean注解的,
当然不限于
@Bean注解,还有@ImportResource,@ComponentScans注解等的解析。
可以看到,这个方法会解析项目中的每一个类,然后拿到带有
@Bean注解的类,进行解析。因为项目中类太多,不能一个一个看,这个时候要使用条件断点。右键断点,输入条件"com.atguigu.gulimall.product.config.testConfiguration".equals(original.getClassName())
如图解析到了我创建的
testConfiguration配置类,集合里面有两个我用@Bean注解创建的Bean
继续学习更详细的步骤中。