spring5学习笔笔记(四)反转控制+复杂对象创建

本文详细探讨了Spring框架中的反转控制(IOC)和依赖注入(DI)概念,解释了它们如何帮助实现解耦合。接着,介绍了Spring创建复杂对象的3种方式,包括FactoryBean接口、实例工厂和静态工厂的实现与应用。最后,总结了Spring工厂创建对象的各种场景,为理解和使用Spring提供了深入的见解。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

反转控制与依赖注入

反转控制(IOC inverse of control)

  1. 控制:对成员变量赋值的控制权
  2. 反转控制:把对成员变量赋值的控制权从代码中(反转)转移到Spring工厂和配置文件中完成。
  3. 好处:解耦合
  4. 底层实现工厂设计模式
    从前的控制权在代码里
    在这里插入图片描述
    spring的控制权在配置文件和spring工厂
    在这里插入图片描述

依赖注入(DI Dependency Injection)

反转控制是一个概念,依赖注入是一种编程方式,需要慢慢体会。

  1. 注入:通过spring工厂及配置文件,为对象(bean 组件)的成员变量赋值
  2. 依赖:我需要你=我依赖你。
  3. 依赖注入:依赖你,就将你作为成员变量注入进来。通过spring配置文件赋值。
  4. 好处:解耦合。配置文件赋值。

spring工厂创建复杂对象

什么是复杂对象

简单对象:可以直接通过new构造方法创建的对象。
在这里插入图片描述
复杂对象:不能直接通过new构造方法创建的对象。
在这里插入图片描述

创建复杂对象的3种方式

factoryBean接口

  1. 实现FactoryBean接口(三个方法)
    因为复杂对象的创建方式不一样,所以提供了这样的接口。
    在这里插入图片描述
    在这里插入图片描述
  2. spring配置文件的配置
    配置bean标签。简单对象通过bean标签获取的是简单对象。
    而class指定类型是factorybean接口的实现类,通过id获得的对象是factorybean所创建的复杂对象。
    在这里插入图片描述
细节
  1. 如果就想获得factory对象,getbean时id前加&
  2. isSingleton方法:返回true只会创建一个复杂对象,返回false每次都会创建新的连接对象。
  3. mysql高版本需要ssl证书,可以再url中指定不适用ssl
    在这里插入图片描述
  4. 依赖注入的体会(DI):上文的链接代码用依赖注入转换。将硬编码的字符串转换为成员变量,加set方法,用sring 配置文件进行注入。
    在这里插入图片描述
FactoryBean实现原理简易版

问题:

  1. 为什么要规定FactoryBean接口实现?(接口回调)
  2. 为什么getbean获得的是复杂对象而不是factoryBean对象?
    步骤:
    getbean的过程:
    1.根据id获得bean标签相关信息,获取对象后判断是不是factorybean的实现类。
    2.spring去调用factorybean子类的getobject方法拿到复杂对象。
    3.返回复杂对象给客户。
FactoryBean总结
spring中用于创建复杂对象的一种方式,也是spring原生提供的,后续讲解其他框架会大量应用。

实例工厂

  1. 为什么还需要有实例工厂?避免spring框架的侵入,整合遗留系统。
  2. 为什么叫实例工厂?因为要先获取实例,然后才能获取对象。
步骤:
  1. 把已有代码类引入
    在这里插入图片描述
  2. 引入新标签 factory-bean factory-method。表明对象来自于原有的factory,需要调用getconn方法获取
    在这里插入图片描述

静态工厂

区别是什么呢?
避免了一步创建的过程。因为工厂中的get方法是静态的,不需要先创建工厂实例。

配置文件也不需要先写工厂对象的内容,直接写到工厂方法即可
在这里插入图片描述

spring 工厂创建对象总结

简单对象:new运算直接创建的 bean标签可以创建
复杂对象:三种方法,开发系统推荐factorybean,遗留系统是实例对象和静态对象。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值