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

Spring實(shí)例化Bean的三種方式詳解

 更新時間:2025年08月17日 11:06:16   作者:別來無恙149  
在Spring中,構(gòu)建應(yīng)用程序主干并且由Spring IoC容器管理的對象被稱為beans,bean是一個由Spring容器實(shí)例化,組裝和管理的對象,本文給大家介紹了Spring實(shí)例化Bean的三種方式,并有詳細(xì)的代碼示例供大家參考,需要的朋友可以參考下

在Spring框架中,Bean實(shí)例化是IoC容器的核心功能。本文將結(jié)合具體代碼示例,詳細(xì)講解三種實(shí)例化方式及其實(shí)現(xiàn)方法。

<!--spring.xml-->
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
 
    <bean id="Bean1" class="com.qcby.bean.Bean1"></bean> <!-- 普通方法-->
 
    <bean id="bean2" class="com.qcby.bean.MyfactoryBean2" factory-method="creatbean2"></bean><!--靜態(tài)工廠-->
 
    <!--創(chuàng)建myfactoryBean3的Bean-->
    <bean id="myfactoryBean3" class="com.qcby.bean.MyfactoryBean3"/>
    <bean id="bean3" factory-bean="myfactoryBean3" factory-method="creatBean3"/>
 
</beans>

方式1:默認(rèn)構(gòu)造器實(shí)例化(最常用)

原理:Spring直接調(diào)用類的無參構(gòu)造器創(chuàng)建實(shí)例
適用場景:大多數(shù)常規(guī)Bean的初始化

代碼實(shí)現(xiàn)

// Bean1.java
package com.qcby.bean;
public class Bean1 {} // 只需無參構(gòu)造器
<!-- spring.xml 配置 -->
<bean id="Bean1" class="com.qcby.bean.Bean1"/>
// instancebean1.java
package com.qcby;
public class instancebean1 {
    public static void main(String[] args) {
        ApplicationContext context = new ClassPathXmlApplicationContext("spring.xml");
        Bean1 bean1 = context.getBean(Bean1.class); // 直接通過類型獲取
        System.out.println(bean1);
    }
}

特點(diǎn)

  • 配置最簡單(只需class屬性)
  • Bean類不需要任何特殊方法
  • 通過getBean(Class)可直接獲取實(shí)例

方式2:靜態(tài)工廠方法

原理:通過工廠類的靜態(tài)方法創(chuàng)建實(shí)例
適用場景:封裝對象創(chuàng)建邏輯

代碼實(shí)現(xiàn)

// Bean2.java
package com.qcby.bean;
public class Bean2 {}
 
// MyfactoryBean2.java
package com.qcby.bean;
public class MyfactoryBean2 {
    public static Bean2 creatbean2() {
        return new Bean2(); // 靜態(tài)工廠方法
    }
}
<!-- spring.xml 配置 -->
<bean id="bean2" class="com.qcby.bean.MyfactoryBean2" 
      factory-method="creatbean2"/>
// instancebean2.java
package com.qcby;
public class instancebean2 {
    public static void main(String[] args) {
        ApplicationContext context = new ClassPathXmlApplicationContext("spring.xml");
        Bean2 bean2 = (Bean2) context.getBean("bean2"); // 通過bean id獲取
        System.out.println(bean2);
    }
}

特點(diǎn)

  • 工廠類不需要實(shí)例化
  • 使用factory-method指定靜態(tài)方法
  • 適合整合第三方庫或復(fù)雜初始化邏輯

方式3:實(shí)例工廠方法

原理:先創(chuàng)建工廠Bean,再調(diào)用其實(shí)例方法

適用場景:工廠需要維護(hù)狀態(tài)或多例Bean創(chuàng)建

代碼實(shí)現(xiàn)

// Bean3.java
package com.qcby.bean;
public class Bean3 {}
 
// MyfactoryBean3.java
package com.qcby.bean;
public class MyfactoryBean3 {
    public Bean3 creatBean3() {
        return new Bean3(); // 實(shí)例工廠方法
    }
}
<!-- spring.xml 配置 -->
<bean id="myfactoryBean3" class="com.qcby.bean.MyfactoryBean3"/>
<bean id="bean3" factory-bean="myfactoryBean3" 
      factory-method="creatBean3"/>
// instancebean3.java
package com.qcby;
public class instancebean3 {
    public static void main(String[] args) {
        ApplicationContext context = new ClassPathXmlApplicationContext("spring.xml");
        Bean3 bean3 = (Bean3) context.getBean("bean3");
        System.out.println(bean3);
    }
}

特點(diǎn)

  • 需要兩個Bean配置(工廠+目標(biāo))
  • 工廠Bean本身可被注入依賴
  • 使用factory-beanfactory-method關(guān)聯(lián)

三種方式對比表

特性默認(rèn)構(gòu)造器靜態(tài)工廠方法實(shí)例工廠方法
配置復(fù)雜度? (最簡單)????? (最復(fù)雜)
創(chuàng)建邏輯直接調(diào)用構(gòu)造器靜態(tài)方法封裝實(shí)例方法封裝
工廠狀態(tài)不支持無狀態(tài)可維護(hù)狀態(tài)
適用場景90%常規(guī)對象復(fù)雜初始化邏輯工廠需依賴其他Bean
獲取方式getBean(Class)getBean("id")getBean("id")
src
├── main
│   ├── java
│   │   ├── com.qcby
│   │   │   ├── instancebean1.java
│   │   │   ├── instancebean2.java
│   │   │   └── instancebean3.java
│   │   └── com.qcby.bean
│   │       ├── Bean1.java
│   │       ├── Bean2.java
│   │       ├── Bean3.java
│   │       ├── MyfactoryBean2.java
│   │       └── MyfactoryBean3.java
│   └── resources
│       └── spring.xml

最佳實(shí)踐建議

1.優(yōu)先選擇默認(rèn)構(gòu)造器

<!-- 99%場景適用 -->
<bean id="service" class="com.example.Service"/>

2.靜態(tài)工廠適用場景

// 當(dāng)需要復(fù)雜初始化時
public class ConnectionFactory {
    public static Connection create() {
        // 復(fù)雜初始化代碼
        return DriverManager.getConnection(...);
    }
}

3.實(shí)例工廠適用場景

// 當(dāng)工廠需要依賴其他Bean時
public class PaymentFactory {
    @Autowired
    private Config config;
    
    public Payment create() {
        return new Payment(config);
    }
}

4.避免的常見錯誤

掌握這三種實(shí)例化方式,能夠靈活應(yīng)對不同場景的對象創(chuàng)建需求,是深入理解Spring IoC容器的關(guān)鍵基礎(chǔ)。

以上就是Spring實(shí)例化Bean的三種方式詳解的詳細(xì)內(nèi)容,更多關(guān)于Spring實(shí)例化Bean的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • springboot實(shí)現(xiàn)熱部署操作方法

    springboot實(shí)現(xiàn)熱部署操作方法

    這篇文章主要介紹了springboot實(shí)現(xiàn)熱部署操作方法,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-11-11
  • 在Java中動態(tài)執(zhí)行字符串代碼的方法小結(jié)

    在Java中動態(tài)執(zhí)行字符串代碼的方法小結(jié)

    在Java編程中,靜態(tài)編譯的特性通常不允許我們直接執(zhí)行運(yùn)行時生成的代碼,然而,有時我們需要動態(tài)地生成并執(zhí)行代碼片段,本文將詳細(xì)介紹如何在Java中運(yùn)行一段字符串代碼,并提供詳細(xì)的代碼案例和運(yùn)行結(jié)果,需要的朋友可以參考下
    2024-08-08
  • 閱讀EnumSet抽象類源碼

    閱讀EnumSet抽象類源碼

    這篇文章主要介紹了閱讀EnumSet抽象類源碼,具有一定參考價值,需要的朋友可以了解下。
    2017-12-12
  • java求數(shù)組第二大元素示例

    java求數(shù)組第二大元素示例

    這篇文章主要介紹了java求數(shù)組第二大元素示例,需要的朋友可以參考下
    2014-04-04
  • java中自定義Spring Security權(quán)限控制管理示例(實(shí)戰(zhàn)篇)

    java中自定義Spring Security權(quán)限控制管理示例(實(shí)戰(zhàn)篇)

    本篇文章主要介紹了java中自定義Spring Security權(quán)限控制管理示例(實(shí)戰(zhàn)篇) ,具有一定的參考價值,感興趣的小伙伴們可以參考一下。
    2017-02-02
  • Java自定義異常類的實(shí)例詳解

    Java自定義異常類的實(shí)例詳解

    這篇文章主要介紹了Java自定義異常類的實(shí)例詳解的相關(guān)資料,希望通過本文能幫助到大家,讓大家學(xué)習(xí)理解掌握這部分內(nèi)容,需要的朋友可以參考下
    2017-09-09
  • SpringBoot的三大開發(fā)工具小結(jié)

    SpringBoot的三大開發(fā)工具小結(jié)

    本文主要介紹了SpringBoot的三大開發(fā)工具,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-02-02
  • Java雙重檢查加鎖單例模式的詳解

    Java雙重檢查加鎖單例模式的詳解

    今天小編就為大家分享一篇關(guān)于Java雙重檢查加鎖單例模式的詳解,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2019-03-03
  • Java?stream流中peek用法簡單示例

    Java?stream流中peek用法簡單示例

    這篇文章主要給大家介紹了關(guān)于Java?stream流中peek用法的相關(guān)資料,Java Stream中的peek()方法也是用于查看每個元素,但不改變流的操作的方法,文中通過代碼介紹的需要的朋友可以參考下
    2023-12-12
  • IDEA使用Mybatis插件 MyBatisCodeHelper-Pro的圖文教程

    IDEA使用Mybatis插件 MyBatisCodeHelper-Pro的圖文教程

    這篇文章主要介紹了IDEA使用Mybatis插件 MyBatisCodeHelper-Pro的教程,本文通過圖文并茂的形式給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-09-09

最新評論

肇东市| 张北县| 刚察县| 郧西县| 江永县| 儋州市| 马山县| 利津县| 邛崃市| 鹤壁市| 余干县| 姜堰市| 道真| 陵水| 株洲市| 珠海市| 峡江县| 海门市| 和林格尔县| 谢通门县| 延吉市| 繁峙县| 锦屏县| 新兴县| 嘉善县| 宕昌县| 吴江市| 南华县| 阳东县| 磴口县| 华蓥市| 五寨县| 德州市| 崇文区| 仪陇县| 襄汾县| 汝州市| 永胜县| 西峡县| 三穗县| 怀来县|