![](https://img.haomeiwen.com/i8553141/f1df16b21294f48c.png)
![](https://img.haomeiwen.com/i8553141/e550893e0221c412.png)
![](https://img.haomeiwen.com/i8553141/4a4675a8863e6477.png)
![](https://img.haomeiwen.com/i8553141/5ed3a8f4e2c736a7.png)
![](https://img.haomeiwen.com/i8553141/61558e1af0ee3c62.png)
![](https://img.haomeiwen.com/i8553141/43fa3d5bc62dd303.png)
Spring会在程序启动时,去获取Bean的定义,然后将beanDefinition注册到容器里面去,我们从上图的源码中可以看到,其中一个Factory类会把BeanDefinition装到一个map集合中,名字装到一个list集合中。
BeanFactory了解
![](https://img.haomeiwen.com/i8553141/f7d802310b5582c1.png)
![](https://img.haomeiwen.com/i8553141/4d8cc80302e23537.png)
![](https://img.haomeiwen.com/i8553141/3f9965d1a4dcd349.png)
从源码中可以看到,BeanFactory可以通过名称获取bean也可以通过bean类型获取bean。
在Spring中默认类都是单例的,所以通过getBean获取的bean一般情况都是同一个对象。如果是多例状态的话,那么getBean会返回一个新的对象。
ApplicationContext了解
![](https://img.haomeiwen.com/i8553141/f34df908fe2893c7.png)
从上图可以看出,ApplicationContext相对于BeanFactory来说实现了很多的接口,所以就有很多的功能,不仅仅具有BeanFactory的功能,也有资源的加载,消息的发送,事件监听等上下文功能。
![](https://img.haomeiwen.com/i8553141/785f8fff57d6e96c.png)
下面是一个实例来演示,我们如果配置一个bean到config中,然后再从程序中获取到这个bean:
![](https://img.haomeiwen.com/i8553141/10fba1f02fbf14c9.png)
![](https://img.haomeiwen.com/i8553141/632253815fb7276a.png)
run这个方法会返回context,然后我们通过getbean获取bean即可。
上面只是演示下加载bean和获取bean的方式,下面是更为简单的写法:
![](https://img.haomeiwen.com/i8553141/fb58a30bdb476476.png)
加上@Component注解,springboot就会扫描到这个类,然后加载到IOC容器中。
![](https://img.haomeiwen.com/i8553141/5f54e4ac294ec512.png)
![](https://img.haomeiwen.com/i8553141/85d5153180a92fde.png)
![](https://img.haomeiwen.com/i8553141/a2cb6f174482138d.png)
网友评论