spring--基础--02--IoC容器

spring–基础–02–IoC容器


代码地址

https://gitee.com/DanShenGuiZu/learnDemo.git

1、介绍

  1. 管理对象的生命周期,从创建到销毁。
  2. 使用依赖注入(DI)来管理组成一个应用程序的组件。对象被称为 Spring Beans

2、类型

2.1、BeanFactory容器

  1. 最简单的容器,给DI提供了基本的支持,
  2. 用org.springframework.beans.factory.BeanFactory接口来定义。
  3. BeanFactory和相关的接口,比如BeanFactoryAware、DisposableBean、InitializingBean,仍旧保留在Spring中,主要目的是向后兼容已经存在的和那些Spring整合在一起的第三方框架。
  4. 在Spring中,有大量对BeanFactory接口的实现。其中,最常被使用的是XmlBeanFactory类。这个容器从一个XML文件中读取配置元数据,由这些元数据来生成一个被配置化的系统或者应用。
  5. 一般不建议使用BeanFactory,一般使用的是ApplicationContext
  6. 特殊情况:在资源宝贵的移动设备或者基于applet的应用当中,BeanFactory会被优先选择。

2.2、ApplicationContext容器

  1. 该容器添加企业特定的功能,在org.springframework.context.ApplicationContextinterface接口中定义。
    1. 从属性文件中解析文本信息
    2. 将事件传递给所指定的监听器
  2. 该容器是由org.springframework.context.ApplicationContext接口定义
  3. 是BeanFactory的子接口,也被称为Spring 上下文。包括BeanFactory容器的所有功能。
  4. 可以加载配置文件中定义的bean,当有请求的时候分配bean。
  5. 最常被使用的ApplicationContext接口实现:
    1. FileSystemXmlApplicationContext
      1. 该容器从XML文件中加载已被定义的bean。
      2. 需要提供给构造器XML文件的完整路径。
    2. ClassPathXmlApplicationContext
      1. 该容器从XML文件中加载已被定义的bean。
      2. 不需要提供XML文件的完整路径,只需正确配置CLASSPATH环境变量即可,因为,容器会从CLASSPATH中搜索bean配置文件。
    3. WebXmlApplicationContext
      1. 该容器会在一个web应用程序的范围内加载在XML文件中已被定义的bean。

3、BeanFactory容器的使用

3.1、XmlBeanFactory

  1. XmlBeanFactory 去生成工厂bean
  2. ClassPathResource 去加载bean配置文件。
  3. 通过配置文件中的beanID来返回一个真正的对象

在这里插入图片描述

4、ApplicationContext容器的使用

4.1、FileSystemXmlApplicationContext

  1. 加载完指定路径下bean配置文件
  2. 利用框架提供的FileSystemXmlApplicationContextAPI去生成工厂beanFactory
  3. 通过配置文件中的beanID来返回一个真正的对象

在这里插入图片描述

5、Bean定义

5.1、属性(元数据),描述

  1. class:类的全限定名
  2. name:指定唯一的bean标识符
  3. ID:指定唯一的bean标识符
  4. scope:bean的作用域
  5. constructor-arg:构造函数(带参)
  6. properties:bean的属性或者字段
    1. value:属性来配置基本数据类型
    2. ref:配置对象引用
    3. bean:定义内部bean
    4. list:注入一列值
    5. set:注入一列值
    6. map注入键值对(k-v)的集合,k,v可以是任何类型。
    7. props:注入键值对(k-v)的集合,k,v都是字符串类型。
  7. autowire:自动装配注入依赖
  8. lazy-initialization mode:IoC容器在它第一次被请求时创建一个bean实例,而不是在启动时去创建一个bean实例。
  9. init-method:在bean的所有必需的属性被容器设置之后,调用回调方法。
  10. destroy-method:当包含该bean的容器被销毁时,使用回调方法。

5.2、Bean与Spring容器的关系

在这里插入图片描述

5.3、配置元数据方式

基于XML的配置文件
基于注解的配置
基于Java的配置

6、bean的作用域

6.1、类型

  1. singleton:
    1. 单例
    2. 默认值
    3. 创建容器时就同时创建了单例对象
  2. prototype:
    1. 多例,相当于new对象
    2. 创建容器时就没有同时创建了多例对象
    3. 当我们获取bean的时候才会去 new 一个对象
  3. request:每次HTTP请求都会创建一个新的Bean,仅用于WebApplicationContext环境
  4. session:同一个HTTPSession共享一个Bean,不同Session使用不同的Bean,仅用于WebApplicationContext环境
  5. global-session:一般用于Portlet应用环境,仅用于WebApplicationContext环境

6.2、案例

在这里插入图片描述

在这里插入图片描述

输出:

---------单例--------------
sayHello2--->helloword
hello2:2056418216
hello21:2056418216
---------多例--------------
sayHello3--->helloword
hello3:648525677
hello31:1253946629

7、Bean生命周期

Bean的定义——Bean的初始化——Bean的使用——Bean的销毁。

7.1、以前对Bean生命周期的管理

  1. 初始化回调:org.springframework.beans.factory.InitializingBean接口实现
  2. 销毁回调:org.springframework.beans.factory.DisposableBean接口实现

7.2、现在通过配置bean属性来控制

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

输出:
Hello4:对象初始化后动作 
Hello5:对象初始化后动作

 
Hello5:销毁对象前动作
Hello4:销毁对象前动作

8、Bean后置处理器

  1. 允许在调用bean初始化方法前后对Bean进行额外的处理。
  2. 使用BeanPostProcessor接口来定义
  3. SpringIoC容器实例化一个bean实例,然后BeanPostProcessor接口进行它们的工作。
  4. ApplicationContext会自动检测实现BeanPostProcessor接口的bean,注册这些bean为后置处理器,然后通过在容器中创建bean,在初始化方法前后调用它。

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

输出:

..... Creating shared instance of singleton bean 'hello2'
所有bean 初始化方法前,执行动作
当前bean:hello2
所有bean 初始化方法后,执行动作
当前bean:hello2


..... Creating shared instance of singleton bean 'hello4'
所有bean 初始化方法前,执行动作
当前bean:hello4
Hello4:对象初始化后动作
所有bean 初始化方法后,执行动作
当前bean:hello4


..... Creating shared instance of singleton bean 'hello5'
所有bean 初始化方法前,执行动作
当前bean:hello5
Hello5:对象初始化后动作
所有bean 初始化方法后,执行动作
当前bean:hello5

9、Bean定义继承

  1. 与Java类的继承无关
  2. 继承父Bean的配置数据,子Bean可以根据需要重写一些值,或者添加其他值。
  3. 父bean可以作为模板,子bean就可以从父bean中继承所需的配置数据.
    1. 不应该指定类的属性,而应该指定带true值的抽象属性

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值