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

Spring的IOC容器實例化bean的方式總結(jié)

 更新時間:2024年01月08日 10:56:36   作者:菜鳥numberone  
IOC容器實例化bean的三種方式:構(gòu)造方法、靜態(tài)工廠、實例工廠,本文將通過代碼示例給大家詳細(xì)講解一下這三種方式,對大家的學(xué)習(xí)或工作有一定的幫助,需要的朋友可以參考下

IOC容器實例化bean的三種方式:構(gòu)造方法、靜態(tài)工廠、實例工廠。 本文章涉及工程目錄如下:

IOC容器實例化bean的三種方式

構(gòu)造方法

對象在new的時候通過構(gòu)造方法完成實例化。bean本質(zhì)是對象,也可以通過構(gòu)造方法完成實例化。

涉及代碼片

// applicationContext.xml
<bean id="flowService" class="com.lwb.services.impl.FlowServiceImpl">
// FlowServiceImpl.java
public class FlowServiceImpl implements FlowService {
    private FlowServiceImpl(){
        System.out.println(this.getClass() + "-----進入FlowServiceImpl" +
                "無參構(gòu)造器");
    }
    @Override
    public void saveService() {
        System.out.println(this.getClass() + "-----進入FlowServiceImpl");
    }
}
// App.java
public class App {
    public static void main(String[] args){
        ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");
    }
}

執(zhí)行后返回結(jié)果:

思考:

1、構(gòu)造方法底層是通過反射機制實現(xiàn)的。注意上面無參構(gòu)造方法是private,只有反射才能訪問到私有方法。

2、底層使用的是無參構(gòu)造方法??梢詫懸粋€帶參的構(gòu)造方法進行驗證,會報錯。

靜態(tài)工廠

涉及代碼片。

// applicationContext.xml
<!--靜態(tài)工廠實例化方法
        class為靜態(tài)工廠類路徑,factory-method 為方法名
    -->
    <bean id="flowDao1" class="com.lwb.factory.FlowDaoStaticFactory" factory-method="getFlowDao"/>
// FlowDaoStaticFactory.java
//注意getFlowDao是static的,所以叫靜態(tài)工廠
public class FlowDaoStaticFactory {
     public static FlowDao getFlowDao(){
        System.out.println("-----進入靜態(tài)工廠方法StaticFactory");
        return new FlowDaoImpl();
    }
}
// App.java
public class App {
    public static void main(String[] args){
        ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");
    }
}

執(zhí)行后返回結(jié)果:

思考:

1、為什么使用靜態(tài)工廠方法,而不直接去new? 靜態(tài)工廠方法在返回new的對象實例之前,可以實現(xiàn)一些業(yè)務(wù)邏輯,如代碼中的日志輸出。

實例工廠

涉及代碼片。

// applicationContext.xml
	<bean id="flowDaoExFactory" class="com.lwb.factory.FlowDaoExFactory"/>
    <bean id="flowDao2" factory-method="getFlowDao" factory-bean="flowDaoExFactory"/>
// FlowDaoExFactory .java
//注意getFlowDao是public的,對比靜態(tài)工廠
public class FlowDaoExFactory {
    public FlowDao getFlowDao(){
        System.out.println(this.getClass() + "------進入實例工廠類FlowDaoExFactory");
        return new FlowDaoImpl();
    }
}
// App.java
public class App {
    public static void main(String[] args){
        ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");
    }
}

執(zhí)行后返回結(jié)果:

思考:

1、靜態(tài)工廠和實例工廠的區(qū)別?

靜態(tài)工廠方法是static的,是在類加載的時候就創(chuàng)建了,可以直接使用,不需要實例化工廠類。實例工廠是public的,需要先實例化,才能使用。靜態(tài)工廠適合實時性很高的場景。實際場景中大部分使用實例工廠。

2、實例工廠的簡單寫法——FactoryBean

涉及代碼片。

// applicationContext.xml
	<bean id="flowDao3" class="com.lwb.factory.FlowDaoFactoryBean"/>
// FlowDaoFactoryBean .java
public class FlowDaoFactoryBean implements FactoryBean<FlowDao> {
    //返回實例化對象
    @Override
    public FlowDao getObject() throws Exception{
        System.out.println(this.getClass() + "------進入實例工廠FlowDaoFactoryBean,getObject");
        return new FlowDaoImpl();
    }
    //返回class對象
    @Override
    public Class<?> getObjectType() {
        System.out.println(this.getClass() + "------進入實例工廠FlowDaoFactoryBean,getObjectType");
        return FlowDao.class;
    }
}
// App.java
public class App {
    public static void main(String[] args){
        ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");
    }
}

思考:

1、為什么只輸出了getObject()里面的內(nèi)容?getObject()重寫了返回實例化對象的方法。getObjectType()返回的是class對象,只有在調(diào)用的時候才會執(zhí)行(反射?)

2、FlowDaoFactoryBean可以通過重寫isSingleton()方法聲明是否是單例。

思考

1、上述例子中App.java為什么不獲取bean(執(zhí)行FlowDao flowDao = (FlowDao) ctx.getBean("flowDao3")),也能實例化?

IOC實例化bean對象的時機:

(1)IOC初始化的bean對象默認(rèn)是單例的。單例+懶加載會在ioc容器初始化完成后直接實例化所有bean對象供使用。

(2)非單例和單例+非懶加載。在使用bean的時候才會去初始化。

以上就是Spring的IOC容器實例化bean的方式總結(jié)的詳細(xì)內(nèi)容,更多關(guān)于Spring IOC容器實例化bean的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • 解決idea 拉取代碼出現(xiàn)的 “ Сannot Run Git Cannot identify version of git executable: no response“的問題

    解決idea 拉取代碼出現(xiàn)的 “ Сannot Run Git Cannot identify version of

    這篇文章主要介紹了解決idea 拉取代碼出現(xiàn)的 “ Сannot Run Git Cannot identify version of git executable: no response“的問題,需要的朋友可以參考下
    2020-08-08
  • Java遠(yuǎn)程debug調(diào)試的操作步驟

    Java遠(yuǎn)程debug調(diào)試的操作步驟

    日常項目中,通常我們的代碼都是部署到遠(yuǎn)程的服務(wù)器,有時線上出現(xiàn)了問題,經(jīng)常需要我們增加一些日志來排查問題,但是如果是測試環(huán)境的場景下或者我們能進行遠(yuǎn)程調(diào)試的話,我們就可以使用遠(yuǎn)程的Debug方式進行遠(yuǎn)程調(diào)試,下面給大家介紹一下Java遠(yuǎn)程debug調(diào)試的操作步驟
    2025-04-04
  • Spring Boot CORS 配置方法允許跨域請求的最佳實踐方案

    Spring Boot CORS 配置方法允許跨域請求的最佳實踐方案

    跨域請求在現(xiàn)代Web開發(fā)中非常重要,特別是在涉及多個前端和后端服務(wù)時,本文詳細(xì)介紹了跨域請求的背景、重要性以及如何解決跨域問題,通過SpringBoot框架的CORS配置,可以有效地處理跨域請求,確保數(shù)據(jù)傳輸?shù)陌踩院陀脩趔w驗,感興趣的朋友跟隨小編一起看看吧
    2024-11-11
  • java中的Io(input與output)操作總結(jié)(二)

    java中的Io(input與output)操作總結(jié)(二)

    這一節(jié)我們來討論關(guān)于文件自身的操作包括:創(chuàng)建文件對象、創(chuàng)建和刪除文件、文件的判斷和測試、創(chuàng)建目錄、獲取文件信息、列出文件系統(tǒng)的根目錄、列出目錄下的所有文件,等等,感興趣的朋友可以了解下
    2013-01-01
  • Java中的非對稱加密算法原理與實現(xiàn)方式

    Java中的非對稱加密算法原理與實現(xiàn)方式

    在當(dāng)今的信息時代,數(shù)據(jù)安全已經(jīng)成為了一個至關(guān)重要的問題,加密技術(shù)作為保障信息安全的重要手段,受到了廣泛的應(yīng)用和關(guān)注,本篇文章將詳細(xì)介紹Java中的非對稱加密算法原理及其實現(xiàn)方式,需要的朋友可以參考下
    2023-12-12
  • 淺談為什么Java中1000==1000為false而100==100為true

    淺談為什么Java中1000==1000為false而100==100為true

    這篇文章主要介紹了淺談為什么Java中1000==1000為false而100==100為true,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-09-09
  • Java中Runnable和Thread的區(qū)別分析

    Java中Runnable和Thread的區(qū)別分析

    在java中可有兩種方式實現(xiàn)多線程,一種是繼承Thread類,一種是實現(xiàn)Runnable接口,下面就拉分別介紹一下這兩種方法的優(yōu)缺點
    2013-03-03
  • 調(diào)用Process.waitfor導(dǎo)致的進程掛起問題及解決

    調(diào)用Process.waitfor導(dǎo)致的進程掛起問題及解決

    這篇文章主要介紹了調(diào)用Process.waitfor導(dǎo)致的進程掛起問題及解決,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-12-12
  • java中g(shù)radle項目報錯org.gradle?.api.plugins.MavenPlugin解決辦法

    java中g(shù)radle項目報錯org.gradle?.api.plugins.MavenPlugin解決辦法

    在使用Gradle時開發(fā)者可能會遇到org.gradle?.api.plugins.MavenPlugin報錯提醒,這篇文章主要給大家介紹了關(guān)于java中g(shù)radle項目報錯org.gradle?.api.plugins.MavenPlugin的解決辦法,需要的朋友可以參考下
    2023-12-12
  • Spring事務(wù)失效的一種原因關(guān)于this調(diào)用的問題

    Spring事務(wù)失效的一種原因關(guān)于this調(diào)用的問題

    這篇文章主要介紹了Spring事務(wù)失效的一種原因關(guān)于this調(diào)用的問題,本文給大家分享問題原因及解決辦法,通過實例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2021-10-10

最新評論