1.什么是spring IOC
IOC(Inversion of Control)即控制反转,在我们以往的编程中如果需要一个bean往往需要去手动去new一个出来。而spring帮我们解决了这个问题,在spring中我们只需要去定义bean,spring就会自动的帮我们实例化并管理Bean。而这些Bean就管理在spring容器中。
2.什么是spring 容器
相信在此之前各位小伙伴也看过一些spring容器先关的介绍,感觉很高端有没有....尽然可以自动的管理Bean。其实spring容器只是有若干的Map组成的。
3.与spring容器相关的组件:
(1). BeanDefinition(Bean的定义)
举个例子:
①首先我们定义一个User类,并在xml文件中配置:
![](https://img.haomeiwen.com/i17443424/e76fddd5d55762be.png)
![](https://img.haomeiwen.com/i17443424/fdeb68f7a01490d0.png)
②启动Bean容器我们看看BeanDefinition中有什么
![](https://img.haomeiwen.com/i17443424/54eaa3dcbce2d7aa.png)
我们发现在xml文件中配置的属性与BeanDefinition相同,因此在spring中BeanDefinition用来表示我们配置的一个个<bean/>
(2)BeanDefinitionRegistry(用来注册BeanDefinition的容器),这是一个接口,其实现类为DefaultListableBeanFactory。
![](https://img.haomeiwen.com/i17443424/aa849d22bfcb48d7.png)
我们来看看DefaultListableBeanFactory的源码:
①其内含有一个ConcurrentHashMap用来存储Bean的定义
![](https://img.haomeiwen.com/i17443424/9142645e88ae3c15.png)
②registerBeanDefinition方法用来讲我们的BeanDefinition注册到DefaultListableBeanFactory中
![](https://img.haomeiwen.com/i17443424/387958268e451201.png)
(3)DefaultSingletonBeanRegistry:用来管理我们的单例Bean
![](https://img.haomeiwen.com/i17443424/b96a4664a815d2ba.png)
![](https://img.haomeiwen.com/i17443424/372836a74569c89c.png)
不难看出在这两个map中一个用来管理普通的单例Bean,一个用来存储延迟加载的单例Bean.
4.总结
所以我们一般所指的spring容器包括三个Map,其中DefaultListableBeanFactory中的map用来管理我们的BeanDefinition,而DefaultSingletonBeanRegistry中的map用来管理我们的单例Bean。
网友评论