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

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

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

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

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

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)建這種類(lèi)型的對(duì)象?Spring中提供了三種方法來(lái)創(chuàng)建復(fù)雜對(duì)象

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

public class ConnectionFactoryBean implements FactoryBean<Connection> {
    //用于書(shū)寫(xiě)創(chuàng)建復(fù)雜對(duì)象的代碼
    @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>

對(duì)這種使用的解讀:FactoryBean接口中有三個(gè)抽象方法

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

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

直接在這個(gè)類(lèi)寫(xiě)創(chuàng)建復(fù)雜對(duì)象的方法,不用實(shí)現(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實(shí)例 -->
 <bean id="connFactory" class="com.liu.factorybean.ConnectionFactory"></bean>
 <!--在factory-bean中應(yīng)用ConnectionFactory實(shí)例id connFactory -->
 <bean id="conn"  factory-bean="connFactory" factory-method="getConnection"/>

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

和實(shí)例工廠(chǎng)類(lèi)似,只不過(guò)這里把實(shí)例方法,替換為靜態(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;
    }
}

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

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

總結(jié):

這些復(fù)雜對(duì)象我們?cè)谝院蠛苌儆玫?,因?yàn)槲覀冊(cè)谡掀渌蚣軙r(shí),其他框架為我們提過(guò)了,創(chuàng)建復(fù)雜對(duì)象的方法,比如Spring整合Mybatis,Mybatis提供了創(chuàng)建SqlSessionFactory對(duì)象的方法。但是學(xué)習(xí)這些也是有必要的,因?yàn)檫@些框架底層使用的就是FactoryBean等這幾種方式。

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

相關(guān)文章

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

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

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

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

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

    Java消息隊(duì)列RabbitMQ之消息模式詳解

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

    SpringBoot中的FailureAnalyzer使用詳解

    這篇文章主要介紹了SpringBoot中的FailureAnalyzer使用詳解,Spring Boot的FailureAnalyzer是一個(gè)接口,它用于在Spring Boot應(yīng)用啟動(dòng)失敗時(shí)提供有關(guān)錯(cuò)誤的詳細(xì)信息,這對(duì)于開(kāi)發(fā)者來(lái)說(shuō)非常有用,因?yàn)樗梢詭椭覀兛焖僮R(shí)別問(wèn)題并找到解決方案,需要的朋友可以參考下
    2023-12-12
  • 案例講解SpringBoot?Starter的使用教程

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

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

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

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

    logback的DuplicateMessageFilter日志過(guò)濾操作源碼解讀

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

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

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

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

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

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

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

最新評(píng)論

万荣县| 海兴县| 祁连县| 蓬莱市| 紫金县| 江西省| 五指山市| 武清区| 阜南县| 新兴县| 九江县| 和林格尔县| 天台县| 新乡县| 武陟县| 大城县| 安岳县| 高邮市| 平安县| 浙江省| 武山县| 达州市| 新蔡县| 宁夏| 顺平县| 江达县| 宁陕县| 利辛县| 江口县| 常德市| 会同县| 禄丰县| 侯马市| 福建省| 巴南区| 湖口县| 万盛区| 阜康市| 龙州县| 临夏市| 咸宁市|