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

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ù)雜對象

第一種:實(shí)現(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ù)這個對象的特點(diǎn) ,決定是返回true (SqlSessionFactory) 還是 false (Connection)
○ mysql高版本連接創(chuàng)建時,需要制定SSL證書,解決問題的方式
注意:類中的幾個連接數(shù)據(jù)庫的屬性,是自己添加的,便于在配置文件中注入,實(shí)現(xiàn)解耦合。

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

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

和實(shí)例工廠類似,只不過這里把實(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;
    }
}

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

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

總結(jié):

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

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

相關(guān)文章

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

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

    jdk1.8是一款功能強(qiáng)大的Java語音軟件開發(fā)工具包,JDK是學(xué)好Java的第一步,本文重點(diǎn)給大家介紹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服務(wù)端和客戶端RESTful框架

    極簡的Resty服務(wù)端和客戶端RESTful框架

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

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

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

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

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

    使用java生成字母驗(yàn)證碼

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

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

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

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

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

    淺談Spring @Async異步線程池用法總結(jié)

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

最新評論