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

Spring實(shí)例化bean的方式大全

 更新時(shí)間:2025年09月11日 10:29:19   作者:似水流年流不盡思念  
Spring 實(shí)例化 Bean 主要有三種核心方式:構(gòu)造器實(shí)例化、靜態(tài)工廠方法實(shí)例化和實(shí)例工廠方法實(shí)例化,其中構(gòu)造器實(shí)例化是最常用的方式,下面小編給大家詳細(xì)說說這幾種方式,需要的朋友可以參考下

Spring 實(shí)例化 Bean 主要有三種核心方式:構(gòu)造器實(shí)例化、靜態(tài)工廠方法實(shí)例化和實(shí)例工廠方法實(shí)例化,其中構(gòu)造器實(shí)例化是最常用的方式。

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

Spring 容器通過調(diào)用 Bean 類的構(gòu)造器(默認(rèn)無參構(gòu)造器或有參構(gòu)造器)來創(chuàng)建實(shí)例,這是最基礎(chǔ)、最常用的方式。

無參構(gòu)造器實(shí)例化:Bean 類必須提供無參構(gòu)造器(若未顯式定義任何構(gòu)造器,Java 會默認(rèn)生成)。

<!-- 配置文件方式 -->
<bean id="userService" class="com.example.UserService"/>
// 注解方式(@Component、@Service等)
@Service
public class UserService {
    // 無參構(gòu)造器(默認(rèn)存在)
}

有參構(gòu)造器實(shí)例化:需在配置中指定構(gòu)造器參數(shù),Spring 會根據(jù)參數(shù)類型、索引或名稱匹配對應(yīng)的構(gòu)造器。

<bean id="user" class="com.example.User">
    <constructor-arg name="id" value="1"/>
    <constructor-arg name="name" value="Alice"/>
</bean>

2. 靜態(tài)工廠方法實(shí)例化

通過調(diào)用一個靜態(tài)工廠類的靜態(tài)方法來創(chuàng)建 Bean 實(shí)例,適用于實(shí)例創(chuàng)建邏輯復(fù)雜,需封裝在工廠中的場景。

1.定義靜態(tài)工廠類和靜態(tài)方法。
    
public class UserStaticFactory {
    // 靜態(tài)工廠方法
    public static User createUser() {
        return new User(2, "Bob");
    }
}

2.在配置中指定工廠類和靜態(tài)方法。

<bean id="userByStaticFactory" 
      class="com.example.UserStaticFactory" 
      factory-method="createUser"/>
  

3. 實(shí)例工廠方法實(shí)例化

通過調(diào)用一個非靜態(tài)工廠類的實(shí)例方法來創(chuàng)建 Bean 實(shí)例,工廠類本身也需要作為一個 Bean 被 Spring 管理。

1.定義實(shí)例工廠類和實(shí)例方法。

public class UserInstanceFactory {
    // 實(shí)例工廠方法(非靜態(tài))
    public User createUser() {
        return new User(3, "Charlie");
    }
}

2.先配置工廠 Bean,再配置目標(biāo) Bean,指定工廠 Bean 和實(shí)例方法。

<!-- 配置實(shí)例工廠Bean -->
<bean id="userInstanceFactory" class="com.example.UserInstanceFactory"/>
<!-- 通過工廠Bean的實(shí)例方法創(chuàng)建目標(biāo)Bean -->
<bean id="userByInstanceFactory" 
      factory-bean="userInstanceFactory" 
      factory-method="createUser"/>

4.factoryBean

FactoryBean 是 Spring 提供的一種特殊 Bean,它本身不直接作為業(yè)務(wù)對象,而是專門用于創(chuàng)建和管理其他 Bean 實(shí)例的“工廠”。與普通實(shí)例工廠方法不同,F(xiàn)actoryBean 是 Spring 容器級別的擴(kuò)展點(diǎn),使用更靈活。

核心原理

當(dāng) Spring 容器發(fā)現(xiàn)一個 Bean 的類型是 FactoryBean 時(shí),它不會直接返回該 Bean 本身,而是會調(diào)用其 getObject() 方法,并將該方法的返回值作為最終的 Bean 實(shí)例返回給使用者。

實(shí)現(xiàn)步驟

實(shí)現(xiàn) FactoryBean 接口來實(shí)例化 Bean,通常分為以下3步:

1.實(shí)現(xiàn) FactoryBean 接口

自定義一個類實(shí)現(xiàn) org.springframework.beans.factory.FactoryBean 接口,并實(shí)現(xiàn)其3個核心方法。

import org.springframework.beans.factory.FactoryBean;

// T 為要創(chuàng)建的目標(biāo) Bean 類型
public class UserFactoryBean implements FactoryBean<User> {

    /**
     * 核心方法:返回目標(biāo) Bean 的實(shí)例
     * 復(fù)雜的創(chuàng)建邏輯(如依賴注入、初始化配置)可在此實(shí)現(xiàn)
     */
    @Override
    public User getObject() throws Exception {
        User user = new User();
        user.setId(4);
        user.setName("David");
        // 模擬復(fù)雜邏輯:如調(diào)用其他服務(wù)、讀取配置等
        return user;
    }

    /**
     * 返回目標(biāo) Bean 的類型
     */
    @Override
    public Class<?> getObjectType() {
        return User.class;
    }

    /**
     * 指定目標(biāo) Bean 是否為單例(默認(rèn) true)
     */
    @Override
    public boolean isSingleton() {
        return true;
    }
}

2.配置 FactoryBean 到 Spring 容器

將自定義的 FactoryBean 本身作為一個普通 Bean 配置到 Spring 中(XML 或注解方式均可)。

<!-- XML 配置方式 -->
<bean id="userFactoryBean" class="com.example.UserFactoryBean"/>
// 注解配置方式(@Component)
@Component("userFactoryBean")
public class UserFactoryBean implements FactoryBean<User> {
    // 實(shí)現(xiàn)同上
}

3.獲取目標(biāo) Bean

從 Spring 容器中獲取的并非 UserFactoryBean 實(shí)例,而是其 getObject() 方法返回的 User 實(shí)例。

@Test
public void test6() {
  // 測試類
  //通過注解的方式生成bean的測試
  ApplicationContext context = new ClassPathXmlApplicationContext("spring.xml");

  User user = (User) context.getBean("myFactoryBean");
  System.out.println(user);
  //獲取工廠本身
  UserFactoryBean userFactoryBean = (UserFactoryBean) context.getBean("&myFactoryBean");
  System.out.println(userFactoryBean);

}

關(guān)鍵特點(diǎn)

  • 隱藏創(chuàng)建細(xì)節(jié):將目標(biāo) Bean 復(fù)雜的創(chuàng)建邏輯(如依賴組裝、多步驟初始化)封裝在 FactoryBean 中,使用者無需關(guān)心。
  • 容器集成度高:FactoryBean 本身受 Spring 容器管理,可以注入其他 Bean、感知容器生命周期(如實(shí)現(xiàn) InitializingBean)。
  • 單例/多例控制:通過 isSingleton() 方法可靈活控制目標(biāo) Bean 是單例(默認(rèn))還是多例。

典型應(yīng)用場景

  • 整合第三方框架:如 MyBatis 中的 SqlSessionFactoryBean,Spring 整合 Redis 時(shí)的 RedisTemplate 工廠等。
  • 創(chuàng)建復(fù)雜實(shí)例:當(dāng)一個 Bean 的創(chuàng)建需要大量配置(如讀取配置文件、調(diào)用多個服務(wù))時(shí),使用 FactoryBean 封裝邏輯。

總結(jié)

實(shí)例化方式核心特點(diǎn)適用場景
構(gòu)造器實(shí)例化簡單直接,Spring 默認(rèn)方式大多數(shù)普通 Bean,無復(fù)雜創(chuàng)建邏輯
靜態(tài)工廠實(shí)例化通過靜態(tài)方法創(chuàng)建,工廠無需實(shí)例化復(fù)雜創(chuàng)建邏輯,需封裝且工廠無需狀態(tài)
實(shí)例工廠實(shí)例化通過實(shí)例方法創(chuàng)建,工廠需被 Spring 管理復(fù)雜創(chuàng)建邏輯,工廠本身需要維護(hù)狀態(tài)
factoryBean實(shí)例化實(shí)現(xiàn) FactoryBean 接口能感知 Spring 容器,可注入其他 Bean,配置簡單,只需注冊 FactoryBean 本身,可集成 Spring 生命周期接口(如 DisposableBean)

到此這篇關(guān)于Spring實(shí)例化bean的方式大全的文章就介紹到這了,更多相關(guān)Spring實(shí)例化bean內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • SpringBoot過濾器的使用

    SpringBoot過濾器的使用

    過濾器是對數(shù)據(jù)進(jìn)行過濾,預(yù)處理過程,當(dāng)我們訪問網(wǎng)站時(shí),有時(shí)候會發(fā)布一些敏感信息,發(fā)完以后有的會用*替代,還有就是登陸權(quán)限控制等,一個資源,沒有經(jīng)過授權(quán),肯定是不能讓用戶隨便訪問的,這個時(shí)候,也可以用到過濾器,需要的朋友可以參考一下
    2021-11-11
  • Spring Security基于JWT登錄認(rèn)證的項(xiàng)目實(shí)踐

    Spring Security基于JWT登錄認(rèn)證的項(xiàng)目實(shí)踐

    JWT被用來在身份提供者和服務(wù)提供者間傳遞被認(rèn)證的用戶身份信息,本文主要介紹了Spring Security基于JWT登錄認(rèn)證的項(xiàng)目實(shí)踐,文中通過示例代碼介紹的非常詳細(xì),需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-07-07
  • SpringBoot項(xiàng)目集成License授權(quán)與續(xù)期完整指南

    SpringBoot項(xiàng)目集成License授權(quán)與續(xù)期完整指南

    SpringBoot項(xiàng)目中,通過引入第三方spring-boot-starter-license組件,可以快速實(shí)現(xiàn)系統(tǒng)權(quán)限到期控制、License 證書管理等功能,具有一定的參考價(jià)值,感興趣的可以了解一下
    2025-07-07
  • springboot獲取properties屬性值的多種方式總結(jié)

    springboot獲取properties屬性值的多種方式總結(jié)

    這篇文章主要介紹了springboot獲取properties屬性值的多種方式總結(jié),具有很好的參考價(jià)值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-03-03
  • Java實(shí)現(xiàn)根據(jù)地址智能識別省市區(qū)縣

    Java實(shí)現(xiàn)根據(jù)地址智能識別省市區(qū)縣

    這篇文章主要為大家詳細(xì)介紹了如何編寫一個Java工具類,可以根據(jù)身份證地址或用戶輸入的地址,智能識別并提取出詳細(xì)的省市區(qū)縣信息,感興趣的小伙伴可以了解下
    2025-03-03
  • Java實(shí)現(xiàn)文件切割拼接的實(shí)現(xiàn)代碼

    Java實(shí)現(xiàn)文件切割拼接的實(shí)現(xiàn)代碼

    這篇文章主要介紹了Java實(shí)現(xiàn)文件切割拼接的實(shí)現(xiàn)代碼,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-11-11
  • gradle中的增量構(gòu)建淺析

    gradle中的增量構(gòu)建淺析

    這篇文章主要介紹了gradle中的增量構(gòu)建,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-02-02
  • SpringBoot配置多個數(shù)據(jù)源超簡單步驟(連接多個數(shù)據(jù)庫)

    SpringBoot配置多個數(shù)據(jù)源超簡單步驟(連接多個數(shù)據(jù)庫)

    公司項(xiàng)目有連接多個不同數(shù)據(jù)庫的需求,特研究了一下,根據(jù)網(wǎng)上的資料,這篇文章主要給大家介紹了關(guān)于SpringBoot配置多個數(shù)據(jù)源(連接多個數(shù)據(jù)庫)的相關(guān)資料,需要的朋友可以參考下
    2024-05-05
  • java中的反射及其優(yōu)點(diǎn)說明

    java中的反射及其優(yōu)點(diǎn)說明

    這篇文章主要介紹了java中的反射及其優(yōu)點(diǎn)說明,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-05-05
  • 詳解Spring?Boot接收參數(shù)的19種方式

    詳解Spring?Boot接收參數(shù)的19種方式

    Spring?Boot提供了多種注解來接收不同類型的參數(shù),本文給大家介紹Spring?Boot接收參數(shù)的19種方式,感興趣的朋友跟隨小編一起看看吧
    2025-01-01

最新評論

香河县| 合阳县| 荥阳市| 长阳| 罗江县| 固原市| 江油市| 义乌市| 方山县| 阿克苏市| 连山| 巨野县| 西林县| 城步| 泾川县| 阿尔山市| 丹巴县| 沙雅县| 湘阴县| 保定市| 彩票| 六盘水市| 太仆寺旗| 旬阳县| 台山市| 印江| 鄂托克前旗| 宁波市| 阿拉善右旗| 武隆县| 华池县| 桐城市| 南昌市| 大厂| 南康市| 搜索| 胶南市| 景宁| 噶尔县| 永和县| 张家界市|