国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

BeanFactory 與 FactoryBean 的核心區(qū)別與應用

開發(fā) 架構(gòu)
BeanFactory是Spring框架中最基礎(chǔ)的IoC容器接口,它定義了Spring容器的基本功能規(guī)范。作為Spring IoC容器的頂層接口,BeanFactory負責管理Bean的生命周期,包括Bean的實例化、配置、依賴注入和銷毀等。

前言

在Spring框架的學習過程中,BeanFactory與FactoryBean是兩個容易混淆但又至關(guān)重要的概念。它們都與Spring的核心功能:依賴注入(DI)和控制反轉(zhuǎn)(IoC)密切相關(guān),但各自承擔著不同的職責。

概念概述

BeanFactory:Spring IoC 容器的核心接口

BeanFactory是Spring框架中最基礎(chǔ)的IoC容器接口,它定義了Spring容器的基本功能規(guī)范。作為Spring IoC容器的頂層接口,BeanFactory負責管理Bean的生命周期,包括Bean的實例化、配置、依賴注入和銷毀等。

Spring容器的本質(zhì)就是BeanFactory的實現(xiàn)類,它通過加載配置元數(shù)據(jù)(如XML配置文件、注解等)來管理Bean的創(chuàng)建和依賴關(guān)系。BeanFactory采用了懶加載(lazy initialization)策略,只有當調(diào)用getBean()方法時才會實例化Bean,這有助于提高應用的啟動性能。

FactoryBean:自定義 Bean 的創(chuàng)建工廠

FactoryBean是一個特殊的Bean,它是一個Bean工廠,用于創(chuàng)建和配置復雜的Bean實例。當某些Bean的創(chuàng)建過程比較復雜(如需要大量的初始化參數(shù)、依賴多個其他組件或涉及復雜的業(yè)務邏輯)時,使用FactoryBean可以將對象的創(chuàng)建邏輯封裝起來,實現(xiàn)職責分離。

FactoryBean本身也是一個Bean,它被Spring容器管理,但它的主要作用是創(chuàng)建其他Bean。通過實現(xiàn)FactoryBean接口,開發(fā)者可以自定義Bean的創(chuàng)建過程,獲得更大的靈活性。

BeanFactory 詳解

BeanFactory接口位于org.springframework.beans.factory包下,定義了一系列用于操作Bean的方法,核心方法包括:

public interface BeanFactory {
    // 獲取Bean的方法
    Object getBean(String name) throws BeansException;
    <T> T getBean(String name, Class<T> requiredType) throws BeansException;
    <T> T getBean(Class<T> requiredType) throws BeansException;
    
    // 檢查Bean是否存在
    boolean containsBean(String name);
    
    // 判斷Bean是否為單例
    boolean isSingleton(String name) throws BeansException;
    
    // 判斷Bean是否為原型
    boolean isPrototype(String name) throws BeansException;
    
    // 檢查Bean是否與指定類型匹配
    boolean isTypeMatch(String name, ResolvableType typeToMatch) throws BeansException;
    
    // 獲取Bean的類型
    Class<?> getType(String name) throws BeansException;
    
    // 獲取Bean的別名
    String[] getAliases(String name);
}

主要實現(xiàn)類

Spring 提供了多個BeanFactory的實現(xiàn)類,適應不同的應用場景:

  • DefaultListableBeanFactory:最常用的實現(xiàn)類,是Spring容器的默認選擇,支持所有BeanFactory的功能,包括XML配置、注解配置等。
  • XmlBeanFactory:基于XML配置文件的BeanFactory實現(xiàn),現(xiàn)已不推薦使用,推薦使用DefaultListableBeanFactory配合XmlBeanDefinitionReader。
  • ApplicationContext:雖然ApplicationContext是BeanFactory的子接口,但它提供了更多企業(yè)級功能,如國際化支持、事件發(fā)布等,是實際開發(fā)中更常用的容器。

工作原理

BeanFactory的工作流程可以概括為以下幾個步驟:

  • 加載配置元數(shù)據(jù):通過XML文件、注解或Java配置類等方式加載Bean的定義信息。
  • 解析Bean定義:將配置元數(shù)據(jù)解析為BeanDefinition對象,包含Bean的類名、屬性、依賴關(guān)系等信息。
  • 注冊Bean定義:將BeanDefinition注冊到BeanFactory中。
  • 實例化Bean:當調(diào)用getBean()方法時,BeanFactory根據(jù)BeanDefinition的信息實例化Bean。
  • 依賴注入:為實例化的Bean注入依賴的其他Bean。
  • 初始化Bean:調(diào)用Bean的初始化方法(如init-method)。
  • 返回Bean實例:將初始化完成的Bean返回給調(diào)用者。

使用示例

// 創(chuàng)建BeanFactory實例
DefaultListableBeanFactory beanFactory = new DefaultListableBeanFactory();

// 加載XML配置文件
XmlBeanDefinitionReader reader = new XmlBeanDefinitionReader(beanFactory);
reader.loadBeanDefinitions(new ClassPathResource("applicationContext.xml"));

// 獲取Bean實例
UserService userService = (UserService) beanFactory.getBean("userService");
userService.doSomething();

FactoryBean 詳解

接口定義

FactoryBean接口同樣位于org.springframework.beans.factory包下,定義了三個核心方法:

public interface FactoryBean<T> {
    // 返回由FactoryBean創(chuàng)建的Bean實例
    T getObject() throws Exception;
    
    // 返回由FactoryBean創(chuàng)建的Bean的類型
    Class<?> getObjectType();
    
    // 指示由FactoryBean創(chuàng)建的Bean是否為單例
    boolean isSingleton();
}

工作原理

FactoryBean的工作機制如下:

  • 開發(fā)者實現(xiàn)FactoryBean接口,在getObject()方法中定義Bean的創(chuàng)建邏輯。
  • 將FactoryBean實現(xiàn)類注冊到Spring容器中(如通過XML 配置或@Component`注解)。
  • 當通過getBean(beanName)方法獲取Bean時,Spring容器會先檢查該Bean是否為FactoryBean:

如果是FactoryBean,則容器會調(diào)用其getObject()方法,返回所創(chuàng)建的目標Bean。

如果需要獲取FactoryBean本身,則需要在beanName前加上&前綴,如getBean("&myFactoryBean")。

使用場景

FactoryBean適用于以下場景:

  • 創(chuàng)建復雜對象:當Bean的創(chuàng)建過程涉及復雜的初始化邏輯、多個依賴或第三方庫集成時,使用FactoryBean可以封裝這些復雜性。
  • 創(chuàng)建特定類型的對象:如創(chuàng)建數(shù)據(jù)庫連接池、線程池、JMS連接等資源密集型對象。
  • 集成第三方框架:Spring與MyBatis、Hibernate等框架的集成中,大量使用了FactoryBean來創(chuàng)建這些框架的核心對象。

實現(xiàn)示例

public class UserFactoryBean implements FactoryBean<User> {
    private String username;
    private String password;
    private int age;
    
    // 構(gòu)造函數(shù)注入?yún)?shù)
    public UserFactoryBean(String username, String password, int age) {
        this.username = username;
        this.password = password;
        this.age = age;
    }
    
    @Override
    public User getObject() throws Exception {
        // 復雜的對象創(chuàng)建邏輯
        User user = new User();
        user.setUsername(username);
        user.setPassword(encryptPassword(password)); // 密碼加密
        user.setAge(age);
        user.setCreateTime(new Date());
        user.setStatus(UserStatus.ACTIVE);
        return user;
    }
    
    @Override
    public Class<?> getObjectType() {
        return User.class;
    }
    
    @Override
    public boolean isSingleton() {
        returnfalse; // 每次獲取都創(chuàng)建新實例
    }
    
    // 密碼加密方法
    private String encryptPassword(String password) {
        // 實際項目中可能使用更復雜的加密算法
        return DigestUtils.md5DigestAsHex(password.getBytes());
    }
}

BeanFactory 與 FactoryBean 的區(qū)別與聯(lián)系

核心區(qū)別

特性

BeanFactory

FactoryBean

角色

Spring IoC 容器的頂層接口,負責管理所有 Bean

特殊的 Bean,用于創(chuàng)建其他 Bean 的工廠

功能

提供 Bean 的注冊、實例化、依賴注入等完整功能

僅負責創(chuàng)建特定類型的 Bean,封裝創(chuàng)建邏輯

關(guān)注點

整體的 Bean 生命周期管理

特定 Bean 的創(chuàng)建過程

使用方式

作為容器直接使用或擴展

實現(xiàn)其接口,將其注冊為 Bean,用于創(chuàng)建其他 Bean

懶加載

默認采用懶加載策略

由其getObject()方法的實現(xiàn)決定

內(nèi)在聯(lián)系

  • FactoryBean本身是由BeanFactory管理的Bean,它的生命周期受BeanFactory控制。
  • BeanFactory在實例化FactoryBean類型的Bean時,會特殊處理,通過其getObject()方法獲取目標Bean。
  • 兩者都參與了Spring容器中Bean的創(chuàng)建過程,BeanFactory是全局管理者,F(xiàn)actoryBean是特定Bean的創(chuàng)建者。
責任編輯:武曉燕 來源: 一安未來
相關(guān)推薦

2023-10-27 07:39:44

IOC容器Spring

2025-09-09 07:05:51

2025-03-10 09:30:00

SpringJava開發(fā)

2023-07-06 14:24:23

Spring接口自定義

2021-05-10 08:01:12

BeanFactoryFactoryBean容器

2019-09-11 10:05:48

HTMLCSSJavaScript

2023-10-16 08:16:31

Bean接口類型

2020-06-24 09:35:50

SpringSpring BooJava

2009-02-16 09:25:43

EJBJavaBeanWebSphere

2009-07-06 17:08:53

JDBC與ODBC的區(qū)

2024-10-06 12:40:26

2024-04-26 00:07:27

SDKAPI工具

2023-08-09 18:26:02

光纖綜合布線

2012-01-12 09:30:26

虛擬化云計算Web應用

2012-01-13 13:51:21

云計算

2025-10-27 01:22:00

MCPAPI網(wǎng)關(guān)

2010-04-23 08:56:12

Oracle DRCP

2023-11-02 07:14:23

2017-05-12 09:35:35

5G網(wǎng)絡SDNNFV

2015-05-27 10:01:24

云計算云存儲架構(gòu)
點贊
收藏

51CTO技術(shù)棧公眾號

亚洲福中文字幕伊人影院| 午夜在线视频观看日韩17c| 国产欧美高清在线| 亚洲欧美日韩中文在线制服| 国内久久精品视频| av电影一区| 国产免费xxx| 最新的欧美黄色| 国产视频亚洲色图| 欧美日韩一区二区三区在线电影 | aiss精品大尺度系列| 中文字幕第21页| 日本成人免费在线| 福利微拍一区二区| 精品成人一区二区三区免费视频| 国产精品女主播| 欧美午夜片在线观看| 日韩专区欧美专区| 久久xxx视频| 男人艹女人网站| 亚洲a成v人在线观看| 7777精品伊人久久久大香线蕉完整版 | 99爱视频在线| 91国在线精品国内播放| 五月天中文字幕一区二区| 99国产精品久久久久久久| 在线视频超级| 成年人羞羞的网站| 精品久久久三级| 一区二区欧美日韩视频| 亚洲丝袜美腿综合| 在线一区视频| 欧美电影在线观看网站| 免费人成短视频在线观看网站| 国产视频99| 在线日韩欧美视频| 亚洲日本护士毛茸茸| 在线视频精品| 北岛玲精品视频在线观看| 桥本有菜亚洲精品av在线| 精品国产乱码久久久久久久软件| 亚洲性视频网址| 亚洲一区二区欧美激情| 久久综合网络一区二区| 综合激情网...| 91se在线| 男人揉女人奶房视频60分| 亚洲最大成人在线| 国产亚洲欧美日韩美女| 亚洲成人精品在线观看| 韩国欧美国产一区| 精品国产一区一区二区三亚瑟| 欧洲在线视频| 116极品美女视频在线观看| 青青草国产精品| 97视频在线观看亚洲| 日韩欧美成人一区| 国产午夜亚洲精品羞羞网站| 国产一区亚洲| 亚洲网址在线观看| 欧美jizz18hd性欧美| 日韩福利视频在线| 久久国产精品亚洲va麻豆| 欧美高跟鞋交xxxxxhd| 91精品国产欧美一区二区| 国产精品久久久久久久久晋中| 天堂午夜影视日韩欧美一区二区| 外国成人在线视频| 美女视频在线免费| 三级在线观看| 国产成人精品视频ⅴa片软件竹菊| 国产精品久久一区二区三区| 欧美俄罗斯乱妇| 精品国产乱码久久久久久1区2区 | 欧美天堂在线观看| 国产69精品久久99不卡| 性xxxx欧美老肥妇牲乱| 激情亚洲小说| 黄色网址在线免费观看| av美女在线| 老子影院午夜伦不卡大全| 亚洲曰本av电影| 久久久国产一区二区| 日韩视频在线一区二区| 亚洲精品国产无套在线观| 不卡影院免费观看| 国产美女诱惑一区二区| 亚洲影院天堂中文av色| 日韩电影免费观| 麻豆视频在线观看免费网站| 成人免费看黄网址| 99久久99久久精品| 久久亚洲午夜电影| 国产精品久久久久久av福利| 色婷婷av一区二区三区在线观看 | 免费人成精品欧美精品| 国产精品久久久久一区二区三区厕所| 亚洲欧美专区| 国产福利在线免费观看| 男人av在线| 大胆高清日本a视频| 六月婷婷在线视频| 色播五月综合| 翡翠波斯猫1977年美国| 97视频在线观看免费| 中文字幕精品av| 亚洲精品一区二区三区99| 色综合久久88色综合天天6| 国产精品乱码妇女bbbb| av电影天堂一区二区在线| 久久97超碰色| 老牛嫩草一区二区三区日本| 国产精品啊v在线| 欧洲杯半决赛直播| 9l亚洲国产成人精品一区二三| 日韩不卡在线| 成人免费高清观看| 日本不卡不卡| 日韩av地址| 四虎精品成人免费网站| www.4438全国最大| 污污网站免费观看| 日本www在线播放| 女人色极品影院| 在线视频不卡一区二区| 欧美一级二级三级| 精品国产乱码久久久久久郑州公司| 亚洲va欧美va在线观看| 国产精品香蕉国产| 国产精品第1页| 国产成人精品电影久久久| 97超碰国产精品女人人人爽| 欧美激情18p| 欧美日韩福利视频| 理论片在线不卡免费观看| 在线日韩日本国产亚洲| 在线看日韩av| 日韩中文在线观看| 久久精品视频一| 久久91亚洲人成电影网站| 久久伊人精品天天| 久久伊人精品视频| 九色精品美女在线| 欧美福利视频网站| 91精品国产网站| 国产成人综合一区二区三区| 国产精品444| 91久久久久久久久久久久久| 99免费在线观看视频| 国产高清一区二区三区| 久久影院理伦片| 亚洲一区二区三区精品视频| 一区二区三区免费看| 亚洲区成人777777精品| 轻点好疼好大好爽视频| 日本中文字幕在线视频观看| 成人午夜精品久久久久久久蜜臀| 久久久久久久中文| 91色国产在线| 特黄特色特刺激视频免费播放 | 精品精品导航| 在线播放高清视频www| 456成人影院在线观看| 日韩中文字幕无砖| av中文字幕一区二区| 在线成人国产| 国产老妇另类xxxxx| 国产日韩精品一区二区三区| 夜夜爽夜夜爽精品视频| 欧美色综合天天久久综合精品| 精品日韩欧美在线| 久久国产一区二区三区| 欧美整片在线观看| 国内精品**久久毛片app| 日本一区二区三区精品视频| 操bbb操bbb| 性生交免费视频| 欧美黑人巨大| 麻豆视频在线观看免费网站| 亚洲成人短视频| 久久成人av| 久久久777| 国产午夜精品在线观看| 欧美色videos| 精品亚洲一区二区三区在线播放| 欧美久久精品午夜青青大伊人| 国产精品无av码在线观看| 日韩区国产区| 亚洲一区二区蜜桃| 你懂的视频在线| 欧美xxxxxx| 国产精选一区| 日本视频在线一区| 国产精品久久久久四虎| 欧美在线视频全部完| 亚洲人成电影网站色www| 欧美一区深夜视频| 日本精品一区二区三区高清 久久| 97国产精东麻豆人妻电影| 青青草观看免费视频在线|