您的位置:首页 > 编程语言 > Java开发

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

2020-12-28 20:38 225 查看
1 FactoryBean接口
  • 开发步骤

      实现FactoryBean接口

    1. Spring配置文件中注册

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

      如果class类型是FactoryBean接口的实现类,那么通过id值获得的是这个类

      getObject()
      方法所返回的对象。比如 Connection SqlSessionFactory

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

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

       

  • 细节分析

      如果就想获得FactoryBean类型的对象,在id前加上&符号,

      ctx.getBean("&conn")
      ,此时获得的就是ConnectionFactoryBean对象本身。

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

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

    2. mysql高版本连接创建时,需要制定SSL证书,解决问题的方式。

      url = "jdbc:mysql://localhost:3306/suns?useSSL=false"
    3. 体会依赖注入(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内部运行流程:

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

  • FactoryBean总结

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

  • 内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
    标签: