欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Spring復雜對象創(chuàng)建的方式小結

 更新時間:2022年01月13日 17:00:07   作者:等待花開I  
這篇文章主要介紹了Spring復雜對象創(chuàng)建的三種方式,現(xiàn)在使用Spring如何創(chuàng)建這種類型的對象?Spring中提供了三種方法來創(chuàng)建復雜對象,需要的朋友可以參考下

在Spring中,對于簡單類型的創(chuàng)建,我們可以使用set注入和構造注入。但是對于復雜類型的如何創(chuàng)建?

什么是復雜類型,比如連接數(shù)據(jù)庫的Connection對象,以及Mybatis中的SqlSessionFactory對象。
在以前我們是通過這種方式獲取Connection對象的:

Connection conn = null;
        try {
            Class.forName("com.mysql.cj.jdbc.Driver");
            conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/mysql", "root", "123456");
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } catch (SQLException e) {
            e.printStackTrace();
        }

現(xiàn)在使用Spring如何創(chuàng)建這種類型的對象?Spring中提供了三種方法來創(chuàng)建復雜對象

第一種:實現(xiàn)FactoryBean接口

public class ConnectionFactoryBean implements FactoryBean<Connection> {
    //用于書寫創(chuàng)建復雜對象的代碼
    @Override
    public Connection getObject() throws Exception {
        Class.forName(driverClassName);
        Connection conn = DriverManager.getConnection(url, username, password);
        return conn;
    }
    @Override
    public Class<?> getObjectType() {
        return Connection.class;
    }
    @Override
    public boolean isSingleton() {
        return true;
    }
    private String driverClassName;
    private String url;
    private String username;
    private String password;
	//setter and getter省略

在applicationContext.xml配置文件中

<bean id="conn" class="com.liu.factorybean.ConnectionFactoryBean">
            <property name="driverClassName" value="com.mysql.cj.jdbc.Driver"/>
            <property name="url" value="jdbc:mysql://localhost:3306/mysql?useSSL=false"/>
            <property name="username" value="root"/>
            <property name="password" value="123456"/>
</bean>

對這種使用的解讀:FactoryBean接口中有三個抽象方法

○ 如果就想獲得FactoryBean類型的對象 ctx.getBean("&conn")
獲得就是ConnectionFactoryBean對象
○ isSingleton方法
  返回 true 只會創(chuàng)建一個復雜對象
  返回 false 每一次都會創(chuàng)建新的對象
  問題:根據(jù)這個對象的特點 ,決定是返回true (SqlSessionFactory) 還是 false (Connection)
○ mysql高版本連接創(chuàng)建時,需要制定SSL證書,解決問題的方式
注意:類中的幾個連接數(shù)據(jù)庫的屬性,是自己添加的,便于在配置文件中注入,實現(xiàn)解耦合。

第二種方法:實例工廠 避免Spring框架的侵入整合遺留系統(tǒng)

直接在這個類寫創(chuàng)建復雜對象的方法,不用實現(xiàn)FactoryBean接口。

public class ConnectionFactory {

    public Connection getConnection(){
        Connection conn = null;
        try {
            Class.forName("com.mysql.cj.jdbc.Driver");
            conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/mysql", "root", "123456");
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return conn;
    }
}

但是要在配置文件中進行配置

<!--ConnectionFactory實例 -->
 <bean id="connFactory" class="com.liu.factorybean.ConnectionFactory"></bean>
 <!--在factory-bean中應用ConnectionFactory實例id connFactory -->
 <bean id="conn"  factory-bean="connFactory" factory-method="getConnection"/>

第三種方式:靜態(tài)工廠

和實例工廠類似,只不過這里把實例方法,替換為靜態(tài)方法。

public class StaticConnectionFactory {
    public static Connection getConnection(){
        Connection conn = null;
        try {
            Class.forName("com.mysql.cj.jdbc.Driver");
            conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/mysql", "root", "123456");
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return conn;
    }
}

對應配置文件配置如下:

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

總結:

這些復雜對象我們在以后很少用到,因為我們在整合其他框架時,其他框架為我們提過了,創(chuàng)建復雜對象的方法,比如Spring整合Mybatis,Mybatis提供了創(chuàng)建SqlSessionFactory對象的方法。但是學習這些也是有必要的,因為這些框架底層使用的就是FactoryBean等這幾種方式。

到此這篇關于Spring復雜對象創(chuàng)建的三種方式的文章就介紹到這了,更多相關Spring復雜對象內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • JDK1.8下載、安裝和環(huán)境配置超詳細教程(最新最完整)

    JDK1.8下載、安裝和環(huán)境配置超詳細教程(最新最完整)

    jdk1.8是一款功能強大的Java語音軟件開發(fā)工具包,JDK是學好Java的第一步,本文重點給大家介紹JDK1.8下載、安裝和環(huán)境配置教程,需要的朋友可以參考下
    2022-11-11
  • 自定義feignClient的常見坑及解決

    自定義feignClient的常見坑及解決

    這篇文章主要介紹了自定義feignClient的常見坑及解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-10-10
  • JAVA中尋找最大的K個數(shù)解法

    JAVA中尋找最大的K個數(shù)解法

    尋找最大的K個數(shù),這個是面試中比較常見的一道題,網(wǎng)上也有很多例子,在這里是比較傳統(tǒng)的解法
    2014-04-04
  • 極簡的Resty服務端和客戶端RESTful框架

    極簡的Resty服務端和客戶端RESTful框架

    這篇文章主要為大家介紹了極簡的Resty服務端和客戶端RESTful框架的好處及作用,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步
    2022-03-03
  • @Autowired注入為null的原因與解決方法

    @Autowired注入為null的原因與解決方法

    我們經(jīng)常會通過@Autowired注解將某個類注到另一個類中,但是會發(fā)現(xiàn)注不進去,報NULL,所以本文就給大家分析了@Autowired 注入為null 的原因與解決方法,需要的朋友可以參考下
    2023-09-09
  • 基于jvm-sandbox的imock開發(fā)指南詳解

    基于jvm-sandbox的imock開發(fā)指南詳解

    這篇文章主要為大家介紹了基于jvm-sandbox的imock開發(fā)指南詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-08-08
  • 使用java生成字母驗證碼

    使用java生成字母驗證碼

    這篇文章主要介紹了使用java生成字母驗證碼的相關資料,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-12-12
  • 教你1秒將本地SpringBoot項目jar包部署到Linux環(huán)境(超詳細!)

    教你1秒將本地SpringBoot項目jar包部署到Linux環(huán)境(超詳細!)

    spring Boot簡化了Spring應用的開發(fā)過程,遵循約定優(yōu)先配置的原則提供了各類開箱即用(out-of-the-box)的框架配置,下面這篇文章主要給大家介紹了關于1秒將本地SpringBoot項目jar包部署到Linux環(huán)境的相關資料,超級詳細,需要的朋友可以參考下
    2023-04-04
  • Java 中 synchronized的用法詳解(四種用法)

    Java 中 synchronized的用法詳解(四種用法)

    Java語言的關鍵字,當它用來修飾一個方法或者一個代碼塊的時候,能夠保證在同一時刻最多只有一個線程執(zhí)行該段代碼。本文給大家介紹java中 synchronized的用法,對本文感興趣的朋友一起看看吧
    2015-11-11
  • 淺談Spring @Async異步線程池用法總結

    淺談Spring @Async異步線程池用法總結

    本篇文章主要介紹了淺談Spring @Async異步線程池用法總結,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-07-07

最新評論