精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

面試官:BeanFactory和FactoryBean有哪些區別?

開發 前端
通過分析DefaultListableBeanFactory#preInstantiateSingletons方法和FactoryBean#getObject的調用鏈路可以分析得到。

[[398320]]

區別

說實話,他倆除了名字比較像以外,好像沒有其他共同點了。

「BeanFactory和FactoryBean有哪些區別?」

  1. BeanFactory是一個最基礎的IOC容器,提供了依賴查找,依賴注入等基礎的功能
  2. FactoryBean是創建Bean的一種方式,幫助實現復雜Bean的創建

和BeanFactory相關的還有一個高頻的面試題

「ApplicationContext和BeanFactory有哪些區別?」

  1. BeanFactory是一個最基礎的IOC容器,提供了依賴查找,依賴注入等基礎的功能
  2. ApplicationContext繼承了BeanFactory,在BeanFactory的基礎上增加了企業級的功能,如AOP,資源管理(Resources)事件(Event),國際化(i18n),Environment抽象等

創建Bean的方式

常見的創建Bean的方式有如下四種

  1. 通過構造器
  2. 通過靜態工廠方法
  3. 通過Bean工廠方法
  4. 通過FactoryBean
  1. @Data 
  2. @ToString 
  3. public class User { 
  4.  
  5.  private Long id; 
  6.  private String name
  7.  
  8.  public static User createUser() { 
  9.   User user = new User(); 
  10.   user.setId(1L); 
  11.   user.setName("li"); 
  12.   return user
  13.  } 
  1. public class UserFactory { 
  2.  
  3.  public User createUser() { 
  4.   return User.createUser(); 
  5.  } 
  1. public class UserFactoryBean implements FactoryBean { 
  2.  
  3.  @Override 
  4.  public Object getObject() throws Exception { 
  5.   return User.createUser(); 
  6.  } 
  7.  
  8.  @Override 
  9.  public Class<?> getObjectType() { 
  10.   return User.class; 
  11.  } 
  1. <?xml version="1.0" encoding="UTF-8"?> 
  2. <beans xmlns="http://www.springframework.org/schema/beans" 
  3.     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
  4.     xsi:schemaLocation="http://www.springframework.org/schema/beans 
  5.         https://www.springframework.org/schema/beans/spring-beans.xsd"> 
  6.  
  7.  <!-- 構造方法實例化 Bean --> 
  8.  <bean id="user-by-constructor" class="com.javashitang.domain.User"
  9.   <property name="id" value="1"/> 
  10.         <property name="name" value="li"/> 
  11.  </bean> 
  12.  
  13.  <!-- 靜態方法實例化 Bean --> 
  14.  <bean id="user-by-static-method" class="com.javashitang.domain.User" 
  15.     factory-method="createUser"/> 
  16.  
  17.  <bean id="userFactory" class="com.javashitang.factory.UserFactory"/> 
  18.  
  19.  <!-- Bean工廠方法實例化 Bean --> 
  20.  <bean id="user-by-factory" factory-bean="userFactory" factory-method="createUser"/> 
  21.  
  22.  <!-- FactoryBean實例化 Bean --> 
  23.  <bean id="user-by-factory-bean" class="com.javashitang.factory.UserFactoryBean"/> 
  24. </beans>
  1. public class BeanInstantiationDemo { 
  2.  
  3.  public static void main(String[] args) { 
  4.   BeanFactory beanFactory = new ClassPathXmlApplicationContext("classpath:/bean-instantiation-context.xml"); 
  5.   User user1 = beanFactory.getBean("user-by-constructor"User.class); 
  6.   User user2 = beanFactory.getBean("user-by-static-method"User.class); 
  7.   User user3 = beanFactory.getBean("user-by-factory"User.class); 
  8.   User user4 = beanFactory.getBean("user-by-factory-bean"User.class); 
  9.  } 

實現原理

在分析源碼之前,我們先明確2個概念

「factoryBean是我們配置到容器中的實現FactoryBean接口的Bean,而subBean是用FactoryBean創建出來的Bean」

在Spring容器啟動的過程中,會實例化非延遲的單例Bean,即調用如下方法 DefaultListableBeanFactory#preInstantiateSingletons

調用FactoryBean#getObject的鏈路如下圖

通過分析DefaultListableBeanFactory#preInstantiateSingletons方法和FactoryBean#getObject的調用鏈路可以分析得到

  1. 單例的factoryBean對象本身會在spring容器啟動時主動初始化。而subBean的初始化則是在第一次從緩存中獲取factoryBean并且不為空才會觸發
  2. 如果factoryBean對象實現的接口是SmartFactoryBean且isEagerInit方法返回true,那么subBean對象也會在spring容器啟動的時候主動初始化
  3. 如果bean注冊的時候,beanName對應的bean實例是一個factoryBean,那么我們通過getBean(beanName)獲取到的對象將會是subBean對象;如果要獲取工廠對象factoryBean,需要使用getBean("&" + beanName)
  4. 單例的subBean也會緩存在spring容器中,具體的容器是FactoryBeanRegistrySupport#factoryBeanObjectCache,一個Map

「建議大家看一下DefaultListableBeanFactory#preInstantiateSingletons方法和FactoryBean#getObject方法的調用鏈路,就能理解上面我說的流程了,我就不貼太多源碼了」

應用

目前我只在Dubbbo源碼中看到了FactoryBean的應用

「服務導出:在Dubbo中,服務提供者會被包裝成ServiceBean對象,當監聽到ContextRefreshedEvent事件時開始服務導出」

「服務調用:服務調用方會被包裝成ReferenceBean對象,ReferenceBean實現了FactoryBean接口和InitializingBean接口,創建subBean的邏輯在ReferenceBean#getObject方法中」

「Dubbo服務引入的時機有如下2種。」

  1. 餓漢式:init=true,在Bean生命周期的初始化階段會調用InitializingBean#afterPropertiesSet方法,而這個方法會調用ReferenceBean#getObject方法,完成subBean的創建,即ReferenceBean實例化時完成服務引入
  2. 懶漢式:init=false,在ReferenceBean對應的服務被注入到其他類中時,此時會調用AbstractApplicationContext#getBean,獲取ReferenceBean對象,因為ReferenceBean實現了FactoryBean接口,所以會調用ReferenceBean#getObject方法,完成subBean的創建,即完成服務引入
  1. public class ReferenceBean<T> extends ReferenceConfig<T> implements FactoryBean, ApplicationContextAware, InitializingBean, DisposableBean { 
  2.  
  3.     @Override 
  4.     public Object getObject() { 
  5.         return get(); 
  6.     } 
  7.  
  8.     @Override 
  9.     @SuppressWarnings({"unchecked"}) 
  10.     public void afterPropertiesSet() throws Exception { 
  11.  
  12.         // 省略部分代碼 
  13.  
  14.         if (shouldInit()) { 
  15.             getObject(); 
  16.         } 
  17.     } 
  18.      

本文轉載自微信公眾號「Java識堂」,可以通過以下二維碼關注。轉載本文請聯系Java識堂公眾號。

 

責任編輯:武曉燕 來源: Java識堂
相關推薦

2025-03-10 09:30:00

SpringJava開發

2023-07-06 14:24:23

Spring接口自定義

2023-02-20 08:08:48

限流算法計數器算法令牌桶算法

2021-07-01 07:51:45

React事件綁定

2021-09-30 07:57:13

排序算法面試

2023-02-17 08:10:24

2024-04-03 15:33:04

JWTSession傳輸信息

2024-09-19 08:42:43

2025-03-26 01:25:00

MySQL優化事務

2024-03-07 17:21:12

HotSpotJVMHot Code

2024-02-26 14:07:18

2024-03-12 14:36:44

微服務HTTPRPC

2024-04-19 00:00:00

計數器算法限流算法

2025-03-10 00:00:00

property?attributeHTML

2025-03-10 11:40:00

前端開發HTML

2024-03-20 15:12:59

KafkaES中間件

2021-12-13 06:56:45

Comparable元素排序

2021-12-23 07:11:31

開發

2023-10-16 08:16:31

Bean接口類型

2021-07-02 07:06:20

React組件方式
點贊
收藏

51CTO技術棧公眾號

伊人情人网综合| 伊人成人在线| 精品一区二区三区日韩| 精品日韩99亚洲| 国产精品久久久久高潮| 最新国产精品自拍| 日本天堂在线观看| 国产欧美日韩一区二区三区四区| 亚洲精品中文字幕乱码三区 | 国产精品日韩在线播放| 日本精品一二三| 户外露出一区二区三区| 成人中文字幕合集| 中文字幕亚洲综合| 九色91popny| 免费观看成年在线视频网站| 日韩午夜av在线| 精品成人a区在线观看| 一区二区三区国产福利| www.五月婷婷.com| 国产剧情在线观看一区| 日韩欧美色综合网站| 亚洲第一福利网| 99久久久无码国产精品性色戒| 中文字幕二区三区| 成人免费在线播放| 在线观看一区二区视频| 成人一区二区三区四区| 国产一区第一页| 久久爱.com| 国产精品二区一区二区aⅴ污介绍| 国产精品video| 久久免费小视频| gogo人体一区| 精品日本美女福利在线观看| 久久综合伊人77777麻豆| 在线观看国产亚洲| 国产一区99| 亚洲国产精品视频在线观看| 日韩精品一区二区三区久久| 免费看男男www网站入口在线| 国产在线国偷精品免费看| 欧美成人中文字幕| 69xxx免费视频| 国产亚洲久久| 精品欧美一区二区三区| 日韩精品一区二区免费| 神马亚洲视频| 蜜臀av性久久久久蜜臀aⅴ流畅| 日韩中文理论片| 性活交片大全免费看| 成人免费91| 欧美日韩极品在线观看一区| 大桥未久一区二区| 一级淫片免费看| 国产专区一区| 亚洲色图在线观看| 日本成人xxx| 蜜桃视频在线观看免费视频| 国产亚洲精品资源在线26u| 国产精品丝袜久久久久久高清| 国产精品夜夜夜爽阿娇| 国产成人aa在线观看网站站| 色欧美片视频在线观看在线视频| 一区二区av| 日本综合在线| 国产精品福利电影一区二区三区四区 | 亚洲成人网av| 丰满岳乱妇一区二区| 草草在线观看| 久久精品一级爱片| 999国产视频| 天堂网一区二区| 奇米777欧美一区二区| 欧美人成在线视频| 大胸美女被爆操| 久久夜色精品国产噜噜av小说| 91黄色免费观看| 婷婷激情四射五月天| 免费在线看污片| 国产精品不卡视频| 成人手机在线播放| av成人手机在线| 99久久国产免费看| 91亚洲精品在线| 国产免费a视频| 久久99热99| 国产区一区二区三区| 97超碰中文字幕| 国产美女在线观看一区| 国产美女精品在线观看| 99久久99久久久精品棕色圆| 日韩制服丝袜先锋影音| 久久久噜噜噜久久久| 亚洲人与黑人屁股眼交| 欧美日韩亚洲国产精品| 国产一区二区动漫| 国产精品久久久免费观看| 亚洲日本va中文字幕| 51精品秘密在线观看| 奇米影视四色在线| a屁视频一区二区三区四区| 色噜噜偷拍精品综合在线| 亚洲欧美aaa| 成人做爰视频www| 色屁屁一区二区| 天堂网成人在线| 亚洲精品国产setv| 亚洲大胆人体在线| 欧美人与禽zoz0善交| 韩国亚洲精品| 国产精品视频一| 天天综合天天综合| 99国产精品久久久| 超碰成人在线免费观看| 日韩欧美一中文字暮专区| 欧美日韩国产在线观看| 日韩av手机在线播放| 男人的天堂久久| 亚洲精品久久久久久下一站| 久久久精品少妇| 美女尤物久久精品| 国产精品男人爽免费视频1| 东京干手机福利视频| 成人h动漫精品一区二区| 国产一区二区三区黄| 日本a级在线| 一区二区三区不卡视频在线观看| 青青草原网站在线观看| 国产成人免费9x9x人网站视频| 精品美女一区二区三区| 97在线观看免费高| 欧美在线黄色| 久久久久久网址| 午夜婷婷在线观看| 日本va欧美va欧美va精品| 国产一区免费在线| 手机av免费在线| 亚洲第一精品在线| 青青青在线播放| 欧美日韩免费电影| 亚洲午夜久久久影院| 99久久精品国产亚洲| 成人app下载| 日韩av高清在线看片| 成人欧美大片| 欧美久久高跟鞋激| 99热超碰在线| 好吊视频一区二区三区四区| 亚洲xxx自由成熟| 91在线中字| 日韩欧美精品免费在线| www.精品在线| 欧美一区二区性| 国产精品一区久久久| 夜级特黄日本大片_在线| 欧美日韩精品福利| 欧美特黄一级片| 国产在线视视频有精品| 一本色道久久88亚洲精品综合| 国产精品99久久免费| 久久手机免费视频| www.毛片.com| 久久久久久久精| 91蝌蚪视频在线观看| 亚洲乱码一区| 97在线观看视频国产| 中文字幕在线视频免费| 国产精品视频第一区| 日本在线xxx| 亚洲一区二区三区久久久| 亚洲精品国产美女| 欧美日韩一二三四区| 久久精品欧美日韩精品 | 老熟妇高潮一区二区三区| 精品一区二区三区免费观看 | 国产精品婷婷| 成人日韩av在线| 亚洲av成人精品一区二区三区在线播放| 国产精品毛片a∨一区二区三区| 手机在线成人免费视频| 亚洲情侣在线| 国产剧情日韩欧美| 污的网站在线观看| 精品无码久久久久久国产| 中文字幕亚洲欧美日韩| 免费在线一区观看| 99久re热视频精品98| 精品久久ai电影| 国产精品成人一区二区| av电影免费在线观看| 日韩黄在线观看| 久久精品视频日本| 国产在线国偷精品免费看| 亚洲人成无码网站久久99热国产| 伊人成综合网yiren22| 成人国产精品一区二区| 俺来俺也去www色在线观看| 欧美一区二区人人喊爽| 黑人狂躁日本娇小| caoporen国产精品视频| 欧美黑人在线观看| 女厕嘘嘘一区二区在线播放 | 日本免费一区二区三区| 不卡视频观看| 久久精品国产成人精品| 在线免费av网| 国产精品美女久久久久久 | 无码人妻精品一区二区三区9厂| 成人在线综合网| 91日韩视频在线观看| 精品91视频| 午夜探花在线观看| 精品免费一区二区| 国产精品美女视频网站| hd国产人妖ts另类视频| 日韩高清a**址| 国产夫妻自拍av| 一区二区三区四区高清精品免费观看| 在线观看日本www| 一本到12不卡视频在线dvd| 久久婷婷国产综合尤物精品| 久九九久频精品短视频| 欧美激情xxxx| 欧美孕妇孕交xxⅹ孕妇交| 色综合天天综合| 你懂得视频在线观看| 久久99深爱久久99精品| 久久精品一区二| 三级电影一区| 99re在线国产| 自拍在线观看| 日韩中文字幕网| www视频在线| 欧美日韩亚洲视频| 国产一级做a爰片在线看免费| 国产精品―色哟哟| 中文字幕网站在线观看| 国产在线一区观看| mm131亚洲精品| 奇米一区二区三区| 国产又大又黄又粗的视频| 欧美专区18| 欧美两根一起进3p做受视频| 国产日产高清欧美一区二区三区| 欧美一级视频在线播放| 国产精品一在线观看| 欧美动漫一区二区| 视频91a欧美| 97在线看福利| 在线免费看h| 日韩av片永久免费网站| 成人在线免费看片| 日韩精品中文字幕在线播放| 日韩在线视频免费| 欧美日韩精品一区二区天天拍小说 | 亚洲成人一区| 精品一区日韩成人| 深夜福利亚洲| 91中文字幕一区| 性欧美18~19sex高清播放| 欧美一区二区大胆人体摄影专业网站| 日本成人网址| 欧美成人在线影院| wwww在线观看免费视频| 2019中文字幕在线观看| 欧美成人ⅴideosxxxxx| 欧美大片在线免费观看| 爱看av在线| 国产成人亚洲综合91| 国模雨婷捆绑高清在线| 91精品国产乱码久久久久久蜜臀 | 日本老熟妇毛茸茸| 日韩精品国产精品| 亚洲一区二区三区观看| 国产91对白在线观看九色| 丝袜制服一区二区三区| 久久国产精品无码网站| 日韩av成人网| 久久精品久久99精品久久| 精品久久一二三| 模特精品在线| av噜噜在线观看| 美女视频一区在线观看| 男人的天堂最新网址| 成人久久视频在线观看| 欧美18—19性高清hd4k| zzijzzij亚洲日本少妇熟睡| 少妇大叫太粗太大爽一区二区| 国产白丝网站精品污在线入口| 第四色在线视频| 国产精品视频一二三区| 婷婷色一区二区三区| 中文字幕人成不卡一区| 麻豆视频免费在线播放| 一级特黄大欧美久久久| 中文字幕在线播| 欧美成人精品高清在线播放| 猫咪在线永久网站| 欧美国产乱视频| 91精品国产66| 国产乱子伦精品| 国产精品久久久久无码av| 亚洲精品成人久久久998| 国产尤物久久久| a级片一区二区| 欧美激情无毛| 密臀av一区二区三区| 成人国产精品视频| 少妇的滋味中文字幕bd| 精品国产成人在线| 国产精品久久久久久久妇| 欧美久久久久中文字幕| 欧洲伦理片一区 二区 三区| 欧美日韩第一页| 老司机精品视频网| 欧美精品尤物在线| 国产一区二区三区自拍| 欧美成年人视频在线观看| 99九九99九九九视频精品| 欧美交换国产一区内射| 亚洲国产精品嫩草影院| 亚洲影院一区二区三区| 亚洲人在线视频| 欧美激情网站| 国产精品免费一区二区| 在线中文一区| 五月婷婷丁香色| 日本一区免费视频| 三级在线观看免费大全| 欧美色图免费看| av男人天堂网| 色七七影院综合| 成人毛片免费| 亚洲国产日韩美| 日韩电影在线免费看| 亚洲激情视频小说| 亚洲视频免费观看| 久久久久久久久久91| 欧美一区二区成人6969| 黄视频在线观看网站| 国模gogo一区二区大胆私拍 | 91麻豆国产福利在线观看宅福利| 日韩av免费在线| 亚洲综合福利| 激情网站五月天| 久久久久久**毛片大全| 亚洲欧美偷拍视频| 欧美日韩亚洲激情| 五月婷婷在线观看视频| 国内成人精品视频| 国产成人在线中文字幕| 欧美国产视频一区| 粉嫩aⅴ一区二区三区四区五区 | 日本一卡二卡四卡精品| 欧美一级大片在线免费观看| 日韩一级电影| 在线免费一区| 久久精品国产精品亚洲综合| 欧美a在线播放| 欧美精品第1页| 亚洲国产精品精华素| 国产精品区一区二区三在线播放| 1024成人| 亚洲欧美日韩三级| 亚洲人成小说网站色在线| 国产成人毛毛毛片| 午夜伦理精品一区| 蜜臀av免费一区二区三区| 免费观看成人在线视频| 中文字幕一区免费在线观看| 99视频国产精品免费观看a| 欧美风情在线观看| 香蕉国产成人午夜av影院| 成人免费视频久久| 亚洲欧洲精品一区二区精品久久久| 国产精品久久久久久免费| 亚洲美女黄色片| 国内小视频在线看| 欧美精品二区三区四区免费看视频| 天使萌一区二区三区免费观看| 国产精品偷伦视频免费观看了| 亚洲高清视频的网址| 精品一二三区视频| 97在线看福利| 成人同人动漫免费观看 | 99久久这里有精品| 精品少妇在线视频| 国产精品丝袜91| 日本黄色大片视频| 国产精品久久久久久久久久东京| 91精品在线观看国产| 国产肉体xxxx裸体784大胆| 一区二区三区欧美视频| 五月婷婷久久久| 国产欧美日韩综合精品| 欧美亚洲高清| 无码国产精品久久一区免费| 色国产精品一区在线观看| 成人日日夜夜|