zoukankan      html  css  js  c++  java
  • Spring--->FactoryBean创建复杂对象

    1 FactoryBean接口
    • 开发步骤

      1. 实现FactoryBean接口

      2. Spring配置文件中注册

        <bean id="conn" class="com.yuziyan.factorybean.ConnectionFactoryBean"/>
      3. 注意:

        • 如果class类型是FactoryBean接口的实现类,那么通过id值获得的是这个类getObject()方法所返回的对象。比如 Connection SqlSessionFactory

        • 由于我们此时想获取的是Connection对象,所以需要在pom.xml文件中加入相关的依赖

          <!-- MySql连接 -->
          <dependency>
              <groupId>mysql</groupId>
              <artifactId>mysql-connector-java</artifactId>
              <version>5.1.48</version>
          </dependency>
    • 细节分析

      1. 如果就想获得FactoryBean类型的对象,在id前加上&符号,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.yuziyan.factorybean.ConnectionFactoryBean">
            <property name="driverClassName" value="com.mysql.jdbc.Driver"/>
            <property name="url" value="jdbc:mysql://localhost:3306/test?useSSL=false"/>
            <property name="username" value="root"/>
            <property name="password" value="root"/>
        </bean>
        

          

    • FactoryBean的实现原理[简易版]

      Spring内部运行流程:

      1. 通过conn获得ConnectionFactoryBean类的对象。
      2. 进而通过instanceof 判断是否是FactoryBean接口的实现类。
      3. 如果是,Spring按照规定调用getObject()方法返回Connection类的对象。体现了接口回调的特点。

      image-20200417114723005

    • FactoryBean总结

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

  • 相关阅读:
    鹅厂女专家:用“爱折腾”实现跨界之美
    基于腾讯云的视频聊天研究
    iOS微信内存监控
    2017年数据库技术盘点
    如何做好游戏内实时语音体验
    腾讯云微计算实践:从Serverless说起,谈谈边缘计算的未来
    使用腾讯云“自定义监控”监控GPU使用率
    如何在Python中从零开始实现随机森林
    DataGridView 设置某个列为只能为数字
    Ieditor
  • 原文地址:https://www.cnblogs.com/cb1186512739/p/14198530.html
Copyright © 2011-2022 走看看