Spring
运行原理
Spring
启动时读取应用程序提供的
Bean
配置信息,并在
Spring
容器中生成一份相应的Bean
配置注册表,然后根据这张注册表实例化
Bean
,装配好
Bean
之间的依赖关系,为上
层应用提供准备就绪的运行环境。
![](https://i-blog.csdnimg.cn/blog_migrate/2fea04f6b6554deeddd655a93805223a.png)
1.读取Bean的配置信息(xml中的<bean>,java类中有@Configuration,通过注解@Autowrite)
2.将读取到的Bean的配置信息放入Spring配置的容器中的Bean定义的注册表,通过注册表将Bean实例化到Bean的实现类中,形成依赖注入
3.再将Bean实例放入Spring容器中的Bean的缓存池
4.如果需要,就从SpringIOC中的缓存池中取出
ApplicationContext
Spring
中
IOC
容器分类
Spring
中有两个主要的容器系列:
1
)实现
BeanFactory
接口的简单容器;
2
)实现
ApplicationContext
接口的高级容器。
ApplicationContext
容器介绍
ApplicationContext
内部封装了一个
BeanFactory
对象,来实现对容器的操作,
BeanFactory封装了
bean
的信息,而
ApplicationContext
通过访问
BeanFactory
对象获取
bean
的对象信息
ApplicationContext
也 实 现 了 一 系 列 的
BeanFactory
接 口
(
可 以 说
ApplicationContext
对
BeanFactory
对象实现一种代理
)
。
ApplicationContext
在应用这个
DefaultListableBeanFactory
对象
的基础上,不仅实现了BeanFactory
接口提供的功能方法,并且黏合了一些面向应用的功能,如资源
/
国际化支持
/
框架事件支持等
public interface ApplicationContext extends EnvironmentCapable, ListableBeanFactory, //继承于 BeanFactory HierarchicalBeanFactory,//继承于 BeanFactory MessageSource, // ApplicationEventPublisher,// ResourcePatternResolver //继承 ResourceLoader, 用于获取 resource 对象
ClassPathXmlApplicationContext
refresh()
方法
![](https://i-blog.csdnimg.cn/blog_migrate/d90de0ff4f4cc9592ed094e764b490e4.png)
实例化
Bean
工厂
DefaultListableBeanFactory
在
BeanFactory
子类中有一个
DefaultListableBeanFactory
类,它包含了基本
Spirng IoC容器所具有的重要功能,开发时不论是使用
BeanFactory
系列还是
ApplicationContext
系列来
创建容器基本都会使用到
DefaultListableBeanFactory
类,可以这么说,在
spring
中实际上把
它当成默认的
IoC
容器来使用
![](https://i-blog.csdnimg.cn/blog_migrate/2164b4d135520bc0302d22f94676fa6b.png)
解析配置文件
XmlBeanDefinitionReader
![](https://i-blog.csdnimg.cn/blog_migrate/cdef3cfb690af8fe0a31540a37b1ec80.png)
将
BeanDefiniton
注册到容器中
Bean
对象的实例化
GetBean