Spring容器和bean的基本原理

Spring容器和bean的基本原理


传统组件调用方式:

在这里插入图片描述

缺点:

  • 无法真正动态加载
  • 实例无法共享
  • 测试困难

对象创建方式

  1. 原始社会:Student stu = new Student();
  2. 封建社会:程序世界进入半现代化社会,我们用工厂进行解耦合,虽然我们没有new一个对象,但是实际中只是把对象的创建过程封装到了工厂中而已,我们还是new了一个对象,耦合没有完全解开。

不使用Spring的代码

没有使用Spring时,代码中充斥了很多工厂类,单例模式,配置不集中,没有统一管理,组装过程由我们来做,我们把这个写死了,对象是我们new出来的。


解决之道就是使用IOC解耦合

让组件之间的依赖关系通过抽象(接口抽象类的变量)来建立,这样,在组件运行期间,将组件依赖的实际对象注入进来,并由组件内部包含的抽象变量来引用,就可以解耦合了。

IOC是什么

IOC就是控制反转,在IOC模式下,组件不是由引用程序负责创建和配置的,而是由IOC容器负责。在IOC情况下,对象是被动的接受依赖类,容器在实例化对象时,主动的将他所依赖的对象注入给他。应用程序只需要直接使用已经创建并且配置好的组件即可,而不必自己负责创建和配置。

为什么使用IOC

  • 组织中间层对象
  • 消除单利,工厂模式的使用
  • 将面向接口编程做到实处
  • 让单元测试变得简单
  • 消除了依赖环境的查找和特定服务器的代码
  • 代码变得清晰,易于维护和扩展
  • 代码依赖于接口,易于复用
  • 用于看清组件之间的依赖关系
  • 便于团队分模块开发

依赖方式比较

在这里插入图片描述
在IOC应用中可以把BCD的子类的实例传给对应的ABC,只要在Spring的配置文件中修改配置即可,不需要修改代价。

IOC容器

什么是IOC:由容器来管理对象之间的关系,而不是对象本身来管理,就是控制反转或者依赖注入。Spring就是一个IOC容器。

BeanFactory

轻量级IOC容器,尽可能晚的初始化Bean

ApplicationContext

BeanFactory功能的延伸,尽可能早的初始化Bean

ApplicationContext和BeanFactory区别

BeanFactory延迟加载Bean,直到第一次使用getBean()方法获取Bean实例时,才会创建Bean
ApplicationContext在自身被实例化时一次完成所有BeanFactory的创建。大多数时候使用ApplicationContext。

Simple Object

Simple Object范围:
POJO:简单的Java对象(Plain Old Java Objects)实际就是普通JavaBean。
VO:value object 值对象
PO:persistant object 持久对象
DTO:Data Transfer Object 数据传输对象
DAO:Data Access Object 数据访问对象

Bean是什么

具有唯一ID的Simple Object。由IOC容器管理其生命周期及其依赖关系。Bean就是由Spring容器初始化,装配及被管理的对象。一般在XML文件中定义。

Bean的定义和命名

IOC容器至少包含一个BeanFactory定义,但大多数情况会有多个Bean定义。
当使用基于XML的配置元数据时,将在顶层的<bean/>元素中配置一个或者多个<bean/>元素
Bean定义与应用程序中实际使用的对象一一对应。

Bean定义包括:

  1. 服务层对象
  2. 数据访问层对象
  3. 类似Struts Action的表示层对象
  4. Hibernate SessionFactory对象等等
    在这里插入图片描述
    在这里插入图片描述

Bean的生命周期管理

  1. 实例化javaBean
  2. javaBean实例的初始化,即通过IOC注入其依赖性
  3. 基于Spring引用对javaBean实例的使用
  4. IOC容器销毁javaBean实例

实例化Bean

bean定义基本上描述了创建一个或多个实际bean对象的内容
当需要的时候,容器会从bean定义列表中取得一个指定的bean定义,并根据bean定义里面的配置元数据,使用反射机制来创建一个实际的对象。
使用反射创建一个实际的对象,因此需要告知Spring IOC容器我们将要实例化的对象的类型以及如何实例化对象。

  1. 用构造器来实例化
  2. 使用静态工厂方法实例化
  3. 使用实例工厂来实例化
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

实例化IOC容器:

在这里插入图片描述

从IOC容器中得到bean:

在这里插入图片描述

Bean的作用域

在这里插入图片描述

BeanFactory的作用域——初始化Web配置

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

Bean的延迟初始化:

在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值