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

Spring實例化bean的方式大全

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

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

1. 構造器實例化(默認方式)

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

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

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

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

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

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

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

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. 實例工廠方法實例化

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

1.定義實例工廠類和實例方法。

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

2.先配置工廠 Bean,再配置目標 Bean,指定工廠 Bean 和實例方法。

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

4.factoryBean

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

核心原理

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

實現(xiàn)步驟

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

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

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

import org.springframework.beans.factory.FactoryBean;

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

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

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

    /**
     * 指定目標 Bean 是否為單例(默認 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> {
    // 實現(xiàn)同上
}

3.獲取目標 Bean

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

@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);

}

關鍵特點

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

典型應用場景

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

總結

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

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

相關文章

  • SpringBoot過濾器的使用

    SpringBoot過濾器的使用

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

    Spring Security基于JWT登錄認證的項目實踐

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

    SpringBoot項目集成License授權與續(xù)期完整指南

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

    springboot獲取properties屬性值的多種方式總結

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

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

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

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

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

    gradle中的增量構建淺析

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

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

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

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

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

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

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

最新評論

米易县| 当雄县| 黄龙县| 汶上县| 上蔡县| 彭阳县| 衢州市| 临颍县| 衡阳市| 阿勒泰市| 岑溪市| 炎陵县| 长宁区| 弋阳县| 玉溪市| 奈曼旗| 朝阳县| 明溪县| 屯留县| 鸡东县| 星子县| 大埔县| 张家界市| 南投县| 恭城| 崇文区| 名山县| 凤山市| 荃湾区| 鄂尔多斯市| 张掖市| 海城市| 岱山县| 广元市| 洛宁县| 建宁县| 桃源县| 镇康县| 毕节市| 交口县| 内江市|