Spring学习笔记(四):反转控制 与 依赖注⼊

本文深入解析Spring框架的核心概念,包括反转控制(IOC)、依赖注入(DI)及其优势,详细介绍了Spring工厂创建复杂对象的三种方式:FactoryBean接口、实例工厂和静态工厂,帮助读者理解并掌握Spring的核心机制。
摘要由CSDN通过智能技术生成

1.反转(转移)控制(IOC Inverse of Control)

1. 控制:对于成员变量赋值的控制权
2. 反转控制:把对于成员变量赋值的控制权,从代码中反转(转移)到Spring⼯⼚和配置⽂件中完成
3. 好处:解耦合
4. 底层实现:⼯⼚设计模式

在这里插入图片描述

2.依赖注⼊ (Dependency Injection DI)

1.注⼊:通过Spring的⼯⼚及配置⽂件,为对象(bean,组件)的成员变量赋值
2.依赖注⼊:当⼀个类需要另⼀个类时,就意味着依赖,⼀旦出现依赖,就可以把另⼀个类作为本类的成员变量,最终通过Spring配置⽂件进⾏注⼊(赋值)。
3.好处:解耦合

3.Spring⼯⼚创建复杂对象

在这里插入图片描述

1. 什么是复杂对象

复杂对象:指的就是不能直接通过new构造⽅法创建的对象
如:Connection,SqlSessionFactory

2.Spring⼯⼚创建复杂对象的3种⽅式

第一种:FactoryBean接⼝

  1. 实现FactoryBean接⼝
    在这里插入图片描述
  2. Spring配置⽂件的配置
# 如果Class中指定的类型 是FactoryBean接⼝的实现类,那么通过id值获得的是这个类所创建的复杂对象Connection
<bean id="conn" class="com.baizhiedu.factorybean.ConnectionFactoryBean"/>
  • 细节
    1. 如果就想获得FactoryBean类型的对象ctx.getBean("&conn") 获得就是ConnectionFactoryBean对象
    2. isSingleton⽅法 返回 true 只会创建⼀个复杂对象返回 false 每⼀次都会创建新的对象 问题:根据这个对象的特点 ,决定是返回true(SqlSessionFactory) 还是 false (Connection)
    3. mysql⾼版本连接创建时,需要制定SSL证书,解决问题的⽅式
      url ="jdbc:mysql://localhost:3306/suns?useSSL=false"
    4. 依赖注⼊的体会(DI)
把ConnectionFactoryBean中依赖的4个字符串信息 ,进⾏配置⽂件的注⼊
好处:解耦合
<bean id="conn" class="com.baizhiedu.factorybean.ConnectionFactoryBean">
	<property name="driverClassName" value="com.mysql.jdbc.Driver"/>
	<property name="url" value="jdbc:mysql://localhost:3306/suns?useSSL=false"/>
	<property name="username" value="root"/>
	<property name="password" value="123456"/>
</bean>
  • FactoryBean的实现原理[简易版]
Spring内部运⾏流程
1. 通过conn获得ConnectionFactoryBean类的对象 ,进⽽通过instanceof 判断出是FactoryBean接⼝的实现类
2. Spring按照规定 getObject() --->Connection
3. 返回Connection

在这里插入图片描述

  • FactoryBean总结
Spring中⽤于创建复杂对象的⼀种⽅式,也是Spring原⽣提供的,后续讲解Spring整合其他框架,⼤量应⽤FactoryBean

第二种:实例工厂

  1. 避免Spring框架的侵⼊
  2. 整合遗留系统
<bean id="connFactory"class="com.baizhiedu.factorybean.ConnectionFactory"></bean>
<bean id="conn" factory-bean="connFactory" factory-method="getConnection"/>

第三种:静态工厂

在这里插入图片描述

<bean id="conn" class="com.baizhiedu.factorybean.StaticConnectionFactory"  factory-method="getConnection"/>

Spring⼯⼚创建对象的总结

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值