Bean

1.bean的定义格式:

<bean id="" class=""></bean>

2.Bean对象在Spring实现中是以BeanDefinition来描述的;
3.Bean的创建:

BeanFactory通过反射创建bean,BeanFactory通过ResourcePatternResolver (资源解释器)加载对象,通过Map<String,Object>拿到bean的定义;

4.Bean的解析主要是对Spring配置文件的解析

BeanDefinition

1.定义:

BeanDefinition可以理解为一个Bean的配置文件类。

2.BeanDefinition的解析过程:

①在Spring初始化容器过程,创建BeanFactory,调用AbstractApplicationContext的obtainFreshBeanFactory方法,里面会调用AbstractApplicationContext类中实现的refreshBeanFactory方法,在这个方法里,调用了loadBeanDefinitions(beanFactory)来解析BeanDefinition。
②doLoadBeanDefinitions校验、解析xml文件流程:
doLoadBeanDefinitions方法开始解析——>registerBeanDefinition 解析文档创建BeanDefinition

3.BeanDefinition的架构

BeanFactory

1.BeanFactory是一个最基本的工厂类,它定义了IOC容器的基本功能规范,它是IOC容器创建的工厂,通过不同的工厂实现,从不同的配置文件中获取配置生成对应的对象注入IOC容器.
2.BeanFactory创建对象并保存对象(通过反射创建对象),BeanFactory通过ResourcePatternResolver (资源解释器)加载对象,通过Map<String,Object>拿到bean的定义,返回的是一个ConCurrentHashMap(为了让HashMap实现安全的一个类);
3.BeanFactory 有三个子类:

ListableBeanFactory、HierarchicalBeanFactory 和AutowireCapableBeanFactory;

4.默认实现类是 DefaultListableBeanFactory。

5.BeanFactory是个Factory,它负责生产和管理bean的一个工厂。在Spring中,BeanFactory是IOC容器的核心接口,它的职责包括:实例化、定位、配置应用程序中的对象及建立这些对象间的依赖。

BeanFactory实现方案:

1.实现类:DefaultListableBeanFactory
2.派生接口类:ApplicationContext(ApplicationContext接口,它由BeanFactory接口派生而来,ApplicationContext包含BeanFactory的所有功能,通常建议比BeanFactory优先)
3.加载对象:ResourcePatternResolver
4.BeanDefinition 的载入和解析:RegisterBeanDefinition方法将BeanDefinition加载到ConcurrentHashMap里面
5.RegisterBeanDefinition注入

FactoryBean

一般情况下,Spring通过反射机制利用<bean>的class属性指定实现类实例化Bean,在某些情况下,实例化Bean过程比较复杂,如果按照传统的方式,则需要在<bean>中提供大量的配置信息。配置方式的灵活性是受限的,这时采用编码的方式可能会得到一个简单的方案。Spring为此提供了一个org.springframework.bean.factory.FactoryBean的工厂类接口,用户可以通过实现该接口定制实例化Bean的逻辑。FactoryBean接口对于Spring框架来说占用重要的地位,Spring自身就提供了70多个FactoryBean的实现。它们隐藏了实例化一些复杂Bean的细节,给上层应用带来了便利。从Spring3.0开始,FactoryBean开始支持泛型,即接口声明改为FactoryBean<T>的形式。

BeanFactory与FactoryBean的相同点

BeanFactory、FactoryBean都是接口

BeanFactory与FactoryBean的区别

①BeanFactory是个Factory,也就是IOC容器或对象工厂,FactoryBean是个Bean。
②在Spring中,所有的Bean都是由BeanFactory(也就是IOC容器)来进行管理的。但对FactoryBean而言,这个Bean不是简单的Bean,而是一个能生产或者修饰对象生成的工厂Bean,它的实现与设计模式中的工厂模式和修饰器模式类似。

注意:

1.Spring创建对象的过程:IOC创建对象——>容器启动 ——>容器加载配置文件拿到bean的定义,存到对象缓冲区;
2.BeanFactory是Spring的核心 。

Bean、BeanDefinition、BeanFactory、FactoryBean相关推荐

  1. Spring的三大核心接口——BeanFactory、ApplicationContext、WebApplicationContext

    之前也在用这三个接口,但是对于他们的概念还是处于朦胧状态,同时,也不知道他们之间是一个什么关系,趁着现在有点时间总结一下吧,也需要对你有所帮助. 一.BeanFactory        基本认识: ...

  2. Spring的BeanFactory和FactoryBean

    博客迁移了.麻烦去新地址查看. Spring的BeanFactory和FactoryBean 链接地址:http://www.msyy233.com/posts/17047.html#more

  3. [spring源码学习]六、IOC源码-BeanFactory和factory-bean

    https://www.cnblogs.com/jyyzzjl/p/5459335.html 一.代码实例 在我们分析spring的IOC源码的时候,发现除了配置标准的bean,并且通过getBean ...

  4. 【Spring5.x】对象的生命周期、配置文件参数化、自定义类型转换器、后置处理Bean

    工厂高级特性 对象的生命周期 创建阶段 初始化阶段 - InitializingBean.init-method 销毁阶段 - DisposableBean.destroy-method 对象的生命周 ...

  5. 002 第一季SpringBoot2核心技术-核心功能:配置文件、Web开发(原生组件)、数据访问、单元测试、指标监控、原理解析:@Value、命令行参数、手动获取bean、自定义starter

    三.核心技术之- ->核心功能 1. 配置文件 1.1 文件类型 1.1.1 properties 同以前的properties用法 优先级高于yml的方式. 1.1.2 yaml 1) 简介 ...

  6. Spring(二)--------Spring配置、DI依赖注入、Bean自动装配

    Spring(二)--------Spring配置.DI依赖注入.Bean自动装配 5.Spring配置 5.1 别名 设置别名:第一种方式alias <!--其中name为ID的对应值--&g ...

  7. UML类图、JAVA DesignMode 设计模式、设计原则

    全文2.6W余字,读完需要20分钟,介绍23种设计模式,每个模式都有案例与真实使用场景,能够帮助初学者快速了解设计模式,建立起对代码中设计模式的初步理解,要明确:设计模式只是帮助我们更好的设计代码架构 ...

  8. 001-http-总览、文件配置、常用http client、http连接池

    一.概述 http请求项目搭建:地址:https://github.com/bjlhx15/common-study.git 中的common-http 主要针对post请求中的,form表单[app ...

  9. 设计模式----创建型设计模式(单例模式、工厂方法模式、构建者模式)

    创建型设计模式 单例模式(Singleton Pattern) 单例模式介绍 代码演示 饿汉式(静态常量) 饿汉式(静态代码块) 懒汉式(线程不安全) 懒汉式(线程安全,同步方法) 懒汉式(线程安全, ...

最新文章

  1. mysql判断是否在日期区间_通过sql判断时间区间是否存在数据
  2. 多线程循环输出abcc++_C ++循环| 查找输出程序| 套装4
  3. mac下编译curl库(处理https的问题)
  4. matlab jar包,Matlab 將m文件打包成jar包 (二)使用jar包
  5. GB-T 15834-2011《标点符号用法》下载链接
  6. 可以放游戏网站云服务器,游戏网站选择哪个云服务器好?游戏服务器配置方案?...
  7. android 自定义太阳,第一个AOSP安卓10自定义ROM已经可用,并且非常稳定
  8. JS日历控件集合----附效果图、源代码【转:http://www.cnblogs.com/yank/archive/2008/08/14/1267746.html】...
  9. hdu 3987 Harry Potter and the Forbidden Forest
  10. xlsm java 读取_使用POI读/写XLSM
  11. 使用HTML的canvas,给表格画斜线
  12. 使用浏览器插件,下载网页中的图片
  13. webstorm 打不开问题
  14. weblogic 启动报错bea 000386解决方案
  15. Java项目:ssm流浪猫狗救助管理系统
  16. jsp+servlet实现简单登录页面功能Demo
  17. 联想拯救者Y7000 2020安装Windows 10+CentOS7双系统
  18. 嫡权法赋权法_变异系数法_客观赋权法
  19. 【POJ3208】 (DP)
  20. python之torchlight使用_《火炬之光2》功能型MOD制作教程

热门文章

  1. 用户唯一登录,最新登录挤掉以前的登录,实现踢人.
  2. 什么才是状态机?什么又是状态?
  3. 60种数据可视化图表总结
  4. IBM类脑超算平台TrueNorth芯片将于本周送往劳伦斯利弗莫尔
  5. Wake-on-Lan(WoL)软件推荐, 让你不在局域网也能实现网络唤醒
  6. 解决MATLAB2018b打开m文件后注释乱码的问题
  7. Install Mercury MW150US WIFI dongle on RPi
  8. php 画布插入图像,PHP图片处理之图片背景、画布操作
  9. GitLab 无法显示头像的解决方法
  10. 计算机毕设Python+Vue学生社团管理系统(程序+LW+部署)