Spring--->FactoryBean建立复杂对象

1 FactoryBean接口
  • 开发步骤java

    1. 实现FactoryBean接口mysql

    2. Spring配置文件中注册sql

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

      • 若是class类型是FactoryBean接口的实现类,那么经过id值得到的是这个类getObject()方法所返回的对象。好比 Connection SqlSessionFactoryurl

      • 因为咱们此时想获取的是Connection对象,因此须要在pom.xml文件中加入相关的依赖spa

        <!-- MySql链接 -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.48</version>
        </dependency>

         

  • 细节分析code

    1. 若是就想得到FactoryBean类型的对象,在id前加上&符号,ctx.getBean("&conn"),此时得到的就是ConnectionFactoryBean对象自己。xml

    2. isSingleton()方法,返回 true 只会建立一个复杂对象,返回 false 每一次都会建立新的对象对象

      问题:根据这个对象的特色 ,决定是返回true (SqlSessionFactory) 仍是 false (Connection)。blog

    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

相关文章
相关标签/搜索