当前位置: 首页 > news >正文

Spring⼯⼚创建复杂对象

文章目录

  • 5. Spring⼯⼚创建复杂对象
    • 5.1 什么是复杂对象
    • 5.2 Spring⼯⼚创建复杂对象的3种⽅式
      • 5.2.1 FactoryBean 接口
      • 5.2.2 实例⼯⼚
      • 5.2.3 静态工厂
    • 5.3 Spring 工厂的总结
  • 6. 控制Spring⼯⼚创建对象的次数
    • 6.1 如何控制简单对象的创建次数
    • 6.2 如何控制复杂对象的创建次数
    • 6.3 为什么要控制对象的创建次数?


在这里插入图片描述

5. Spring⼯⼚创建复杂对象

在这里插入图片描述

5.1 什么是复杂对象

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

  • Connection
  • SqlSessionFactory

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

5.2.1 FactoryBean 接口

  • 开发步骤

    • 实现FactoryBean接⼝

在这里插入图片描述

  • Spring配置⽂件的配置
# 如果Class中指定的类型 是FactoryBean接⼝的实现类,那么通过id值获得的是
这个类所创建的复杂对象 Connection
<bean id="conn" class="com.snow.factorybean.ConnectionFactoryBean"/>
  • 细节

    • 如果就想获得 FactoryBean 类型的对象,ctx.getBean(“&conn”) 获得就是 ConnectionFactoryBean 对象
    • isSingleton⽅法 返回 true 只会创建⼀个复杂对象 返回 false 每⼀次都会创建新的对象 问题:根据这个对象的特点 ,决定是返回true (SqlSessionFactory) 还是 false (Connection)

依赖注⼊的体会(DI)

把 ConnectionFactoryBean 中依赖的4个字符串信息 ,进⾏配置⽂件的注⼊

好处:解耦合

<bean id="conn" class="com.snow.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的实现原理[简易版]

接⼝回调

  1. 为什么Spring规定FactoryBean接⼝ 实现 并且 getObject()?

  2. ctx.getBean(“conn”) 获得是复杂对象 Connection ⽽没有 获得 ConnectionFactoryBean(&)

Spring内部运⾏流程

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

在这里插入图片描述

  • FactoryBean总结

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

5.2.2 实例⼯⼚

  1. 避免Spring框架的侵⼊
  2. 整合遗留系统

开发步骤:

<bean id="connFactory"class="com.snow.factorybean.ConnectionFactory"></bean>
<bean id="conn" factory-bean="connFactory" factory-method="getConnection"/>

5.2.3 静态工厂

开发步骤

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

5.3 Spring 工厂的总结


在这里插入图片描述



6. 控制Spring⼯⼚创建对象的次数

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

<bean id="account" scope="singleton|prototype" class="xxxx.Account"/>

sigleton: 只会创建⼀次简单对象 默认值
prototype: 每⼀次都会创建新的对象

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

FactoryBean{isSingleton(){//return true 只会创建⼀次return false 每⼀次都会创建新的}
}
# 如没有isSingleton⽅法 还是通过scope属性 进⾏对象创建次数的控制

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

好处:节省不必要的内存浪费

什么样的对象只创建一次

  1. SqlSessionFactory
  2. DAO
  3. Service

什么样的对象 每一次都要创建新的

  1. Connection
  2. SqlSession | Session
  3. Struts2 Action

开发步骤

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


在这里插入图片描述



http://www.lryc.cn/news/305610.html

相关文章:

  • Top-N 泛型工具类
  • Java 后端面试指南
  • 142.环形链表 ||
  • Nacos、Eureka、Zookeeper注册中心的区别
  • CSS重点知识整理1
  • 【Langchain多Agent实践】一个有推销功能的旅游聊天机器人
  • 算法学习(十二)并查集
  • TensorRT及CUDA自学笔记003 NVCC及其命令行参数
  • 数据库管理-第154期 Oracle Vector DB AI-06(20240223)
  • 解决uni-app vue3 nvue中使用pinia页面空白问题
  • 不用加减乘除做加法
  • 旅游组团自驾游拼团系统 微信小程序python+java+node.js+php
  • LeetCode 第41天 | 背包问题 二维数组 一维数组 416.分割等和子集 动态规划
  • Ubuntu20.04和Windows11下配置StarCraft II环境
  • 【NCom】:通过高温气相合成调节Pt-CeO2相互作用以提高晶格氧的还原性
  • git 将一个分支的提交移动到另一个分支
  • vue3 实现 el-pagination页面分页组件的封装以及调用
  • #FPGA(IRDA)
  • Sora—openai最新大模型文字生成视频
  • VoIP(Voice over Internet Protocol 基于IP的语音传输)介绍(网络电话、ip电话)
  • 编程笔记 Golang基础 027 结构体
  • opencascade15解析导出为step格式
  • 【软件设计模式之模板方法模式】
  • Spring Boot项目怎么对System.setProperty(key, value)设置的属性进行读取加解密
  • Linux理解
  • 常用芯片学习——YC688语音芯片
  • C语言:指针的进阶讲解
  • 基于SSM的车位租赁系统(有报告)。Javaee项目。ssm项目。
  • Java pyhon C C++ R JS 主流语言的区别-03
  • 5 buuctf解题