Spring5学习随笔-IOC(反转控制)、DI(依赖注入)和创建复杂对象

这篇具有很好参考价值的文章主要介绍了Spring5学习随笔-IOC(反转控制)、DI(依赖注入)和创建复杂对象。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

学习视频:【孙哥说Spring5:从设计模式到基本应用到应用级底层分析,一次深入浅出的Spring全探索。学不会Spring?只因你未遇见孙哥】

第七章、反转控制与依赖注入

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

  1. 控制:对于成员变量赋值的控制权

  2. 反转控制:把对于成员变量赋值的控制权,从代码中反转(转移)到Spring工厂和配置文件中。

    好处:解耦合

  3. 底层实现:工厂设计模式

如果对工厂设计模式不熟悉,可以看看前面的从简单工厂到通用工厂的笔记:Spring5的基本介绍、工厂设计模式

Spring5学习随笔-IOC(反转控制)、DI(依赖注入)和创建复杂对象

2.依赖注入(Dependency Injection Di)

  1. 注入:通过Spring的工厂及配置文件,为对象(bean、组件)的成员变量赋值

  2. 依赖注入:当一个类需要另一个类时,就意味着依赖,一旦出现依赖,就可以把另一个类作为本类的成员变量,最终通过Spring配置文件进行注入(赋值)

    好处:解耦和

Spring5学习随笔-IOC(反转控制)、DI(依赖注入)和创建复杂对象

第八章、Spring工厂创建复杂对象

Spring5学习随笔-IOC(反转控制)、DI(依赖注入)和创建复杂对象

1.什么是复杂对象

  1. 复杂对象:指的就是不能直接通过new构造方法创建的对象(Connection,SqlSessionFactory)

2.Spring工厂创建复杂对象的3种方式

2.1 FactoryBean接口

FactoryBean是Spring原生提供给我们创建复杂对象的方式,同时也是spring中一个非常重要的机制

  • 开发步骤

    • 实现FactoryBean接口

    Spring5学习随笔-IOC(反转控制)、DI(依赖注入)和创建复杂对象

    • Spring配置文件的配置

      如果Class中指定的类型 是FactoryBean接口的实现类,那么通过id获取的是这个类所创建的复杂对象。

      class虽然指向ConnectionFactoryBean,但是ctx.getBean("conn")获取的是Connection复杂对象。

      <bean id=”conn” class=”com.baizhi.factorybean.ConnectionFactoryBean”/>

  • 细节

    • 如果只想获得FactoryBean类型的对象

      ConnectionFactoryBean conn = (ConnectionFactoryBean) ctx.getBean("&conn"); getBean的参数加上“&”

    • isSingleton方法

      返回true只会创建一个复杂对象

      返回false每一次都会创建新的对象

      问题:怎么选择? 根据这个对象的特点,决定是返回true还是false

    • mysql高版本连接创建时,需要指定ssl证书,在连接数据库的url参数加上 useSSL=false即可解决。

    • 依赖注入的体会

      1. 把Connection Factory Bean中依赖的4个字符串信息,进行配置文件的注入

        好处:解耦合

        <bean id="conn" class="com.baizhi.factorybean.ConnectionFactoryBean">
            <property name="driveClassName" value="com.mysql.jdbc.Driver"/>
            <property name="url" value="jdbc:mysql://localhost:3306/myschool?useSSL=false"/>
            <property name="username" value="root"/>
            <property name="password" value="123456"/>
        </bean>
        
  • FactoryBean的实现原理(简易版)

    1. 接口回调
    2. 为什么Spring规定FactoryBean接口 实现 并且 getObject()?
    3. ctx.getBean(”conn”)获得是复杂对象 Connection,而没有获得ConnectionFactoryBean(&)

Spring内部运行流程

  1. 通过conn获取ConnectionFactoryBean类的对象,进而通过instanceof判断是FactoryBean接口的实现类
  2. Spring按照规定执行 getObject() ——>Connection
  3. 返回Connection

Spring5学习随笔-IOC(反转控制)、DI(依赖注入)和创建复杂对象

  • FactoryBean总结

    Spring中用于创建复杂对象的一种方式,也是Spring原生提供的,后续讲解Spring整合其他框架,会大量应用FactoryBean。

2.2 实例工厂

  1. 避免Spring框架的侵入

    implements FactoryBean(是spring提供的,离开了FactoryBean,没有能代替)

  2. 整合遗留系统(去到公司后,往往是整合遗留下来的代码)

  • 开发步骤
<!-- 2.获取复杂对象 通过实例工厂-->
<bean id="connFactory" class="com.baizhi.factorybean.ConnectionFactory"/>
<bean id="conn" factory-bean="connFactory" factory-method="getConnection"/>

2.3 静态工厂

  • 开发步骤
<!--3. 获取复杂对象 通过静态工厂-->
<bean id="conn" class="xxx.StaticConnectionFactory" factory-method="getConnection"/>

3.Spring工厂创建对象的总结

Spring5学习随笔-IOC(反转控制)、DI(依赖注入)和创建复杂对象

第九章、控制Spring工厂创建对象的次数

1.如何控制简单对象的创建次数

<bean id="account" scope="singleton | prototype" class="com.baizhi.scope.Account"></bean>
singleton:只会创建一次简单对象 默认值
prototype:每一次都会创建新的对象

2.如何控制复杂对象的创建次数

FactoryBean{
	isSingleton(){
		return true 只会创建一次
		return false 每一次创建新的
	}
}
如没有isSingleton方法 还是通过scope控制次数

3.为什么要控制对象的创建次数?

  • 好处:节省不必要的内存浪费(对象创建多次,内存会浪费掉)
  • 什么样的对象只创建一次
    1. SqlSessionFactory
    2. DAO
    3. Service
  • 什么样的对象每次都要创建新的
    1. Connection
    2. SqlSession | Session

下一章:Spring5学习随笔-生命周期、自定义类型转换器、后置处理Bean文章来源地址https://www.toymoban.com/news/detail-746375.html

到了这里,关于Spring5学习随笔-IOC(反转控制)、DI(依赖注入)和创建复杂对象的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Java Spring IoC&DI :探索Java Spring中控制反转和依赖注入的威力,增强灵活性和可维护性

    💓 博客主页:从零开始的-CodeNinja之路 ⏩ 收录文章:Java Spring IoCDI :探索Java Spring中控制反转和依赖注入的威力,增强灵活性和可维护性 🎉欢迎大家点赞👍评论📝收藏⭐文章 我们一下要学习的内容都是为了实现⾼内聚低耦合来进行的 软件设计原则:⾼内聚低耦合. ⾼内聚指

    2024年04月15日
    浏览(38)
  • Spring框架IOC容器和DI依赖注入

    IOC(Invertion Of Control):控制反转,使用对象时,由使用new创建对象转变为由外部提供对象,此过程中对象的创建控制权由程序转移到外部的思想称之为控制反转. DI(Dependency Injection):依赖注入,在容器中建立bean与bean之间的关系的过程,称之为依赖注入 pom.xml依赖引入 BookDao BookDaoImpl Book

    2023年04月09日
    浏览(73)
  • 从依赖倒置原则到IOC控制反转实现

    从依赖倒置原则(Dependency Inversion Principle, DIP)到控制反转(Inversion of Control, IoC)再到依赖注入(Dependency Injection, DI)的演进过程,我们可以理解为一种逐步抽象和解耦的设计思想。这种思想在C#等面向对象的编程语言中得到了广泛的应用。 首先,让我们回顾一下依赖倒置原

    2024年04月24日
    浏览(46)
  • CommunityToolkit.Mvvm8.1 IOC依赖注入控制反转(5)

      本系列文章导航 https://www.cnblogs.com/aierong/p/17300066.html https://github.com/aierong/WpfDemo (自我Demo地址) 希望提到的知识对您有所提示,同时欢迎交流和指正 作者:aierong 出处:https://www.cnblogs.com/aierong     CommunityToolkit.Mvvm包不提供ioc功能,但是官方建议使用:Microsoft.Extensions.DependencyInject

    2023年04月14日
    浏览(39)
  • Spring5学习随笔-基础注解编程

    学习视频:【孙哥说Spring5:从设计模式到基本应用到应用级底层分析,一次深入浅出的Spring全探索。学不会Spring?只因你未遇见孙哥】 指的是在类或方法上加入特定的注解(@XXX),完成特定功能的开发. 注解开发方便 代码简介 开发速度大大提高 Spring开发潮流 Spring2.x引入注解

    2024年02月05日
    浏览(33)
  • Spring学习笔记(二)Spring的控制反转(设计原则)与依赖注入(设计模式)

    是一种设计原则,降低程序代码之间的耦合度 对象由Ioc容器统一管理,当程序需要使用对象时直接从IoC容器中获取。这样对象的控制权就从应用程序转移到了IoC容器 依赖注入是一种消除类之间依赖关系的设计模式。例如,A类要依赖B类,A类不再直接创建B类,而是把这种依赖

    2024年02月19日
    浏览(28)
  • Spring5学习随笔-Spring5的第一个程序(环境搭建、日志框架整合)

    学习视频:【孙哥说Spring5:从设计模式到基本应用到应用级底层分析,一次深入浅出的Spring全探索。学不会Spring?只因你未遇见孙哥】 1.JDK1.8+ 2.Maven3.5+ 3.IDEA2018+ 4.SpringFramework 5.1.4 官网:www.spring.io Spring的jar包 1.设置pom的依赖 Spring的配置文件 1.配置文件的放置位置:任意位置

    2024年02月05日
    浏览(33)
  • Spring IoC (控制反转)

    IoC 是 Inversion of Control 的简写,译为“控制反转”,它不是一门技术,而是一种设计思想,是一个重要的面向对象编程法则。 Spring 通过 IoC 容器来管理所有 Java 对象的实例化和初始化,控制对象与对象之间的依赖关系。我们将由 IoC 容器管理的 Java 对象称为 Spring Bean,它与使

    2024年02月13日
    浏览(23)
  • Spring5学习随笔-事务属性详解(@Transactional)

    学习视频:【孙哥说Spring5:从设计模式到基本应用到应用级底层分析,一次深入浅出的Spring全探索。学不会Spring?只因你未遇见孙哥】 事务是 保证业务操作完整性的一种数据库机制 事务的4特点:ACID A 原子性 C 一致性 I 隔离性 D 持久性 JDBC: Connection.setAutoCommit(false) Connect

    2024年02月05日
    浏览(30)
  • 【学习】Spring IoC&DI

    🎥 个人主页:Dikz12 📕格言:吾愚多不敏,而愿加学 欢迎大家👍点赞✍评论⭐收藏 目录 Spring 是什么? 什么是 IoC容器? 传统开发模式  loC开发模式 IoC的优势  IoC 的使用 Bean的存储   方法注解  DI  属性注入  构造⽅法注⼊  Setter 注⼊ @Autowired存在的问题  解决方案:

    2024年04月15日
    浏览(32)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包