最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

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

什么是復(fù)雜類型,比如連接數(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)建復(fù)雜對象

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

public class ConnectionFactoryBean implements FactoryBean<Connection> {
    //用于書寫創(chuàng)建復(fù)雜對象的代碼
    @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)建一個復(fù)雜對象
  返回 false 每一次都會創(chuàng)建新的對象
  問題:根據(jù)這個對象的特點 ,決定是返回true (SqlSessionFactory) 還是 false (Connection)
○ mysql高版本連接創(chuàng)建時,需要制定SSL證書,解決問題的方式
注意:類中的幾個連接數(shù)據(jù)庫的屬性,是自己添加的,便于在配置文件中注入,實現(xiàn)解耦合。

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

直接在這個類寫創(chuàng)建復(fù)雜對象的方法,不用實現(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;
    }
}

但是要在配置文件中進(jìn)行配置

<!--ConnectionFactory實例 -->
 <bean id="connFactory" class="com.liu.factorybean.ConnectionFactory"></bean>
 <!--在factory-bean中應(yīng)用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;
    }
}

對應(yīng)配置文件配置如下:

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

總結(jié):

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

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

相關(guān)文章

  • java讀取XML文件的四種方法總結(jié)(必看篇)

    java讀取XML文件的四種方法總結(jié)(必看篇)

    下面小編就為大家?guī)硪黄猨ava讀取XML文件的四種方法總結(jié)(必看篇)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-06-06
  • Java對xls文件進(jìn)行讀寫操作示例代碼

    Java對xls文件進(jìn)行讀寫操作示例代碼

    Java開發(fā)項目中經(jīng)常會碰到處理Excel文件中數(shù)據(jù)的情況,下面這篇文章主要給大家介紹了利用Java對xls文件進(jìn)行讀寫操作的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起看看吧。
    2017-08-08
  • Java消息隊列RabbitMQ之消息模式詳解

    Java消息隊列RabbitMQ之消息模式詳解

    這篇文章主要介紹了Java消息隊列RabbitMQ之消息模式詳解,RabbitMQ提供了一種qos(服務(wù)質(zhì)量保證)功能,即在非自動確認(rèn)消息的前提下,如果一定數(shù)目的消息(通過基于Consumer或者Channel設(shè)置Qos的值)未被確認(rèn)前,不進(jìn)行消費新的消息,需要的朋友可以參考下
    2023-07-07
  • SpringBoot中的FailureAnalyzer使用詳解

    SpringBoot中的FailureAnalyzer使用詳解

    這篇文章主要介紹了SpringBoot中的FailureAnalyzer使用詳解,Spring Boot的FailureAnalyzer是一個接口,它用于在Spring Boot應(yīng)用啟動失敗時提供有關(guān)錯誤的詳細(xì)信息,這對于開發(fā)者來說非常有用,因為它可以幫助我們快速識別問題并找到解決方案,需要的朋友可以參考下
    2023-12-12
  • 案例講解SpringBoot?Starter的使用教程

    案例講解SpringBoot?Starter的使用教程

    SpringBoot中的starter是一種非常重要的機(jī)制,能夠拋棄以前繁雜的配置,將其統(tǒng)一集成進(jìn)starter,應(yīng)用者只需要在maven中引入starter依賴,SpringBoot就能自動掃描到要加載的信息并啟動相應(yīng)的默認(rèn)配置,本文通過案例講解SpringBoot?Starter的使用,感興趣的朋友一起看看吧
    2023-12-12
  • Flowable 設(shè)置流程變量的四種方式詳解

    Flowable 設(shè)置流程變量的四種方式詳解

    這篇文章主要為大家介紹了Flowable 設(shè)置流程變量的四種方式詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-11-11
  • logback的DuplicateMessageFilter日志過濾操作源碼解讀

    logback的DuplicateMessageFilter日志過濾操作源碼解讀

    這篇文章主要為大家介紹了logback的DuplicateMessageFilter日志過濾操作源碼解讀,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-11-11
  • 關(guān)于Java的對象序列化流和反序列化流詳細(xì)解讀

    關(guān)于Java的對象序列化流和反序列化流詳細(xì)解讀

    這篇文章主要介紹了關(guān)于Java的對象序列化流和反序列化流,對象序列化:就是將對象保存到磁盤中,或者在網(wǎng)絡(luò)中傳輸對象,反之,自己序列還可以從文件中讀取回來,重構(gòu)對象,對它進(jìn)行反序列化,需要的朋友可以參考下
    2023-05-05
  • java二進(jìn)制運(yùn)算基礎(chǔ)知識點詳解

    java二進(jìn)制運(yùn)算基礎(chǔ)知識點詳解

    在本文里小編給大家分享了關(guān)于java二進(jìn)制運(yùn)算基礎(chǔ)知識點以及實例代碼內(nèi)容,需要的朋友們參考學(xué)習(xí)下。
    2019-08-08
  • Java Kafka分區(qū)發(fā)送及消費實戰(zhàn)

    Java Kafka分區(qū)發(fā)送及消費實戰(zhàn)

    本文主要介紹了Kafka分區(qū)發(fā)送及消費實戰(zhàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-07-07

最新評論

满洲里市| 宝鸡市| 习水县| 高密市| 伊金霍洛旗| 黄平县| 临城县| 五峰| 武夷山市| 名山县| 壤塘县| 蒙阴县| 孝感市| 壤塘县| 衢州市| 辽阳市| 红河县| 庆云县| 交城县| 唐山市| 大埔县| 徐闻县| 正安县| 仪征市| 边坝县| 高密市| 叙永县| 临泽县| 金门县| 攀枝花市| 浦县| 南郑县| 阜康市| 河西区| 常熟市| 广昌县| 长兴县| 江源县| 巩留县| 堆龙德庆县| 开鲁县|