网站正在建设中9797,装潢设计属于什么专业类别,北京有名的设计公司有哪些,建站平台入口目录前言一.BeanFactory快速入门1. BeanFactory创建Bean2. BeanFactory和ApplicationContext的关系3. 和ApplicationContext区别(高频问点)4. BeanFactory的继承体系5. ApplicationContext的继承体系二.Bean实例化的基本流程#xff08;重点)前言
首先感谢您的阅览#xff0…
目录前言一.BeanFactory快速入门1. BeanFactory创建Bean2. BeanFactory和ApplicationContext的关系3. 和ApplicationContext区别(高频问点)4. BeanFactory的继承体系5. ApplicationContext的继承体系二.Bean实例化的基本流程重点)前言
首先感谢您的阅览文章部分有个人思考与总结难免会有遗漏之处如有错误欢迎指正与补充最后也希望您也能有所收获 一.BeanFactory快速入门
1. BeanFactory创建Bean IOC控制反转反转的是bean的创建权 结合上图有以下步骤 1导入Spring的jar包或Maven坐标 2定义UserService接口及其UserServiceImpl实现类 3创建beans.xml配置文件将UserServiceImpl的信息配置到该xml中 4编写测试代码创建BeanFactory加载配置文件获取UserService实例对象。 下面是用BeanFactory创建bean步骤 看到上面的创建过程是不是很熟悉对只是比平时用ApplicationContext多一步而已多了创建工厂对象可以看到上图创建bean过程还是比较麻烦的所以后面的ApplicationContext将其封装了最后简化如下 可以看一下二者的关系快捷键 CTRL alt u 2. BeanFactory和ApplicationContext的关系 它是ApplicationContext的父接口 是Spring的核心容器主要的ApplicationContext实现都组合了它的功能BeanFactory实际上是ApplicationContext的成员变量 3. 和ApplicationContext区别(高频问点)
ApplicationContext应用上下文Spring的容器其实它底层调用bean的操作还都是BeanFactory的。ApplicationContext内部封装了BeanFactory比BeanFactory功能更丰富更强大
BeanFactory与ApplicationContext的区别
1BeanFactory是Spring的早期接口称为Spring的Bean工厂ApplicationContext是后期更高级接口称之为Spring 容器
2ApplicationContext在BeanFactory基础上对功能进行了扩展例如监听功能、国际化功能等。BeanFactory的API更偏向底层ApplicationContext的API大多数是对这些底层API的封装
3Bean创建的主要逻辑和功能都被封装在BeanFactory中ApplicationContext不仅继承了BeanFactory而且ApplicationContext内部还维护着BeanFactory的引用所以ApplicationContext与BeanFactory既有继承关系又有融合关系。
4Bean的初始化时机不同一个延迟加载一个立即加载。原始BeanFactory是在首次调用getBean时才进行Bean的创建而ApplicationContext则是配置文件加载容器一创建就将Bean都实例化并初始化好。 4. BeanFactory的继承体系
BeanFactory是核心接口项目运行过程中肯定有具体实现参与这个具体实现就是DefaultListableBeanFactory而ApplicationContext内部维护的Beanfactory的实现类也是它 5. ApplicationContext的继承体系
只在Spring基础环境下即只导入spring-context坐标时此时ApplicationContext的继承体系 spring环境下常用的三个ApplicationContext作用如下 二.Bean实例化的基本流程重点)
bean的实例化总共以下5步看明白了可以说是拨云见日前后知识点都能衔接
①Spring容器在进行初始化时会将xml配置的的信息注意此时封装的不是对象而是xml中对象配置的信息比如属性之类封装成一个BeanDefinition对象bean定义对象 封装的是bean标签也就是下面这样的 ②将所有的BeanDefinition存储到一个名为beanDefinitionMap的Map集合中去Spring框架再对该Map进行遍历取出每个BeanDefinition对象拿到BeanDefinition内部封装的信息主要是拿bean的类名因为后面要根据反射来创建bean对象的反射忘记了可以看看这篇Java反射使用介绍
你想知道beanDefinitionMap的Map集合是什么吗我在翻源码时看到了它的位置也就是DefaultListableBeanFactory中定义的一个map集合转专门存放bean标签对象的而DefaultListableBeanFactory又是BeanFactory的实现类就是在BeanFactory中维护所以你应该懂了吧。 ③使用反射创建Bean实例对象 ④创建好的Bean对象存储在一个名为singletonObjects单例池也在BeanFactory中维护的Map集合中 ⑤当调用getBean方法最终从该Map集合中取出Bean实例对象返回 最后断点调试验证说明 所以说beanDefinitionMap和singletonObjects都是在beanFactory中维护的 最后这个bean创建的基本流程可以总结为下图后续扩展功能也是在下图中不断扩容