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

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

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

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

IOC容器實(shí)例化bean的三種方式

構(gòu)造方法

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

涉及代碼片

// 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() + "-----進(jìn)入FlowServiceImpl" +
                "無(wú)參構(gòu)造器");
    }
    @Override
    public void saveService() {
        System.out.println(this.getClass() + "-----進(jìn)入FlowServiceImpl");
    }
}
// App.java
public class App {
    public static void main(String[] args){
        ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");
    }
}

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

思考:

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

2、底層使用的是無(wú)參構(gòu)造方法。可以寫(xiě)一個(gè)帶參的構(gòu)造方法進(jìn)行驗(yàn)證,會(huì)報(bào)錯(cuò)。

靜態(tài)工廠

涉及代碼片。

// applicationContext.xml
<!--靜態(tài)工廠實(shí)例化方法
        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("-----進(jìn)入靜態(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的對(duì)象實(shí)例之前,可以實(shí)現(xiàn)一些業(yè)務(wù)邏輯,如代碼中的日志輸出。

實(shí)例工廠

涉及代碼片。

// applicationContext.xml
	<bean id="flowDaoExFactory" class="com.lwb.factory.FlowDaoExFactory"/>
    <bean id="flowDao2" factory-method="getFlowDao" factory-bean="flowDaoExFactory"/>
// FlowDaoExFactory .java
//注意getFlowDao是public的,對(duì)比靜態(tài)工廠
public class FlowDaoExFactory {
    public FlowDao getFlowDao(){
        System.out.println(this.getClass() + "------進(jìn)入實(shí)例工廠類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)工廠和實(shí)例工廠的區(qū)別?

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

2、實(shí)例工廠的簡(jiǎn)單寫(xiě)法——FactoryBean

涉及代碼片。

// applicationContext.xml
	<bean id="flowDao3" class="com.lwb.factory.FlowDaoFactoryBean"/>
// FlowDaoFactoryBean .java
public class FlowDaoFactoryBean implements FactoryBean<FlowDao> {
    //返回實(shí)例化對(duì)象
    @Override
    public FlowDao getObject() throws Exception{
        System.out.println(this.getClass() + "------進(jìn)入實(shí)例工廠FlowDaoFactoryBean,getObject");
        return new FlowDaoImpl();
    }
    //返回class對(duì)象
    @Override
    public Class<?> getObjectType() {
        System.out.println(this.getClass() + "------進(jìn)入實(shí)例工廠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()重寫(xiě)了返回實(shí)例化對(duì)象的方法。getObjectType()返回的是class對(duì)象,只有在調(diào)用的時(shí)候才會(huì)執(zhí)行(反射?)

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

思考

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

IOC實(shí)例化bean對(duì)象的時(shí)機(jī):

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

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

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

相關(guān)文章

  • IDEA使用SequenceDiagram插件繪制時(shí)序圖的方法

    IDEA使用SequenceDiagram插件繪制時(shí)序圖的方法

    這篇文章主要介紹了IDEA使用SequenceDiagram插件繪制時(shí)序圖的方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-09-09
  • Spring Hibernate實(shí)現(xiàn)分頁(yè)功能

    Spring Hibernate實(shí)現(xiàn)分頁(yè)功能

    這篇文章主要為大家詳細(xì)介紹了Spring Hibernate實(shí)現(xiàn)分頁(yè)功能的相關(guān)代碼,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-05-05
  • Java集合框架之Set和Map詳解

    Java集合框架之Set和Map詳解

    大家好,本篇文章主要講的是Java集合框架之Set和Map詳解,感興趣的同學(xué)趕快來(lái)看一看吧,對(duì)你有幫助的話記得收藏一下,方便下次瀏覽
    2021-12-12
  • Java網(wǎng)絡(luò)編程UDP實(shí)現(xiàn)多線程在線聊天

    Java網(wǎng)絡(luò)編程UDP實(shí)現(xiàn)多線程在線聊天

    這篇文章主要為大家詳細(xì)介紹了Java網(wǎng)絡(luò)編程UDP實(shí)現(xiàn)多線程在線聊天,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-07-07
  • mybatis插入與批量插入返回ID的原理詳解

    mybatis插入與批量插入返回ID的原理詳解

    這篇文章主要給大家介紹了關(guān)于mybatis插入與批量插入返回ID的原理的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用mybatis具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-07-07
  • java abstract class interface之間的區(qū)別介紹

    java abstract class interface之間的區(qū)別介紹

    含有abstract修飾符的class即為抽象類,abstract 類不能創(chuàng)建的實(shí)例對(duì)象,abstract class類中定義抽象方法必須在具體(Concrete)子類中實(shí)現(xiàn),所以,不能有抽象構(gòu)造方法或抽象靜態(tài)方法
    2012-11-11
  • @RequestParam 接收參數(shù)的值為null的處理方式

    @RequestParam 接收參數(shù)的值為null的處理方式

    這篇文章主要介紹了@RequestParam 接收參數(shù)的值為null的處理方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-11-11
  • Mybatis-plus操作json字段實(shí)戰(zhàn)教程

    Mybatis-plus操作json字段實(shí)戰(zhàn)教程

    這篇文章主要介紹了Mybatis-plus操作json字段實(shí)戰(zhàn)教程,本文結(jié)合實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-02-02
  • SpringBoot集成EasyExcel的步驟

    SpringBoot集成EasyExcel的步驟

    EasyExcel是阿里巴巴開(kāi)源poi插件之一,主要解決了poi框架使用復(fù)雜,sax解析模式不容易操作,數(shù)據(jù)量大起來(lái)容易OOM,解決了POI并發(fā)造成的報(bào)錯(cuò)。主要解決方式:通過(guò)解壓文件的方式加載,一行一行的加載,并且拋棄樣式字體等不重要的數(shù)據(jù),降低內(nèi)存的占用。
    2021-06-06
  • Java樹(shù)形結(jié)構(gòu)遞歸查詢方式

    Java樹(shù)形結(jié)構(gòu)遞歸查詢方式

    文章介紹了Java中實(shí)現(xiàn)樹(shù)形結(jié)構(gòu)遞歸查詢的方法,首先找出所有的根節(jié)點(diǎn),然后通過(guò)循環(huán)遍歷根節(jié)點(diǎn),找到每個(gè)根節(jié)點(diǎn)的子節(jié)點(diǎn),最終構(gòu)建完整的樹(shù)形結(jié)構(gòu),這是一種有效的遞歸查詢思路,適用于需要層次化展示數(shù)據(jù)的場(chǎng)景
    2024-12-12

最新評(píng)論

囊谦县| 遵义县| 宣威市| 庆城县| 会昌县| 香格里拉县| 高唐县| 镇康县| 腾冲县| 曲靖市| 嘉义市| 满城县| 民乐县| 新民市| 紫阳县| 定边县| 修武县| 涞水县| 习水县| 闵行区| 神木县| 双柏县| 民县| 龙胜| 蒙自县| 曲阜市| 金溪县| 富裕县| 石门县| 天津市| 蕉岭县| 昌吉市| 虞城县| 万山特区| 凤凰县| 榆社县| 巢湖市| 云林县| 醴陵市| 晋宁县| 阿图什市|