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

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

 更新時(shí)間:2025年08月17日 11:06:16   作者:別來無恙149  
在Spring中,構(gòu)建應(yīng)用程序主干并且由Spring IoC容器管理的對(duì)象被稱為beans,bean是一個(gè)由Spring容器實(shí)例化,組裝和管理的對(duì)象,本文給大家介紹了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í)例
適用場景:封裝對(duì)象創(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)

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

三種方式對(duì)比表

特性默認(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ī)對(duì)象復(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ù)雜初始化時(shí)
public class ConnectionFactory {
    public static Connection create() {
        // 復(fù)雜初始化代碼
        return DriverManager.getConnection(...);
    }
}

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

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

4.避免的常見錯(cuò)誤

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

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

相關(guān)文章

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

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

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

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

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

    閱讀EnumSet抽象類源碼

    這篇文章主要介紹了閱讀EnumSet抽象類源碼,具有一定參考價(jià)值,需要的朋友可以了解下。
    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)篇) ,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下。
    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ā)工具,對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-02-02
  • Java雙重檢查加鎖單例模式的詳解

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

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

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

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

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

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

最新評(píng)論

彭州市| 多伦县| 金川县| 固镇县| 安塞县| 阜南县| 定陶县| 富民县| 三门县| 宁远县| 郴州市| 宣恩县| 荆州市| 西峡县| 东乡县| 泰州市| 乌拉特前旗| 苏州市| 大庆市| 二连浩特市| 永新县| 开原市| 玉田县| 那曲县| 勐海县| 墨竹工卡县| 循化| 咸宁市| 淮南市| 武山县| 和田市| 红安县| 镶黄旗| 错那县| 祁东县| 东乌珠穆沁旗| 桦川县| 都匀市| 祁门县| 中江县| 荥阳市|