spring工厂创建复杂对象

在这里插入图片描述

1.什么是复杂对象??

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

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

2.1 FactroyBean 接口

  • 开发步骤
    1.实现FactroryBean接口
    在这里插入图片描述

    2.spring配置文件的配置
 # 如果Class中指定的类型 是FactoryBean接口的实现 类,那么通过id值获得的是这个类所创建的复杂对象
   Connection<bean id="conn" 
   class="com.baizhiedu.factorybean.ConnectionFactoryBean"/>
  • 细节
    1.如果想获得FactoryBean类型的对象 ctx.getBean("&coon") 获得的就是ConnectionFactoryBean对象
    2.isSingleton方法
    返回true只会创建一个复杂对象
    返回false每一次都会创建新的对象
    问题:根据这个对象的特点,决定是返回true还是false
    3.mysql高版本创建连接时,需要指定SSL整数,解决问题的方式
url = "jdbc:mysql://localhost:3306/wangze?useSSL=false"
依赖注入的体会
把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/wangze?useSSL=false"/>
      <property name="username" value="root"/>
      <property name="password" value="123456"/>
    </bean>
FactoryBean的实现原理[简易版]
接口回调
1. 为什么Spring规定FactoryBean接口 实现 并且 getObject()?
2. ctx.getBean("conn") 获得是复杂对象 Connection 而没有 获得 ConnectionFactoryBean(&)

3. Spring内部运行流程
 1. 通过conn获得 ConnectionFactoryBean类的对象 ,进而通过instanceof 判断出是FactoryBean接口的实现类
 2.Spring按照规定 getObject() ---> Connection
 3. 返回Connection 

在这里插入图片描述
FactoryBean总结

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

2.2 实例工厂

1. 避免Spring框架的侵入 
2. 整合遗留系统 
  • 开发步骤

<bean id="connFactory" class="com.baizhiedu.factorybean.ConnectionFactory"></bean>

 <bean id="conn"  factory-bean="connFactory" factory-method="getConnection"/>
2.3 静态工厂
  • 开发步骤

    <bean id="conn" class="com.baizhiedu.factorybean.StaticConnectionFactory" factory-method="getConnection"/>
    
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

结构化思维wz

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值