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

Spring源碼閱讀入門指引

開發 后端
本文大概的對IOC和AOP進行了解,入門先到這一點便已經有了大概的印象了,詳細內容請看下文。

本文說明2點:

1.閱讀源碼的入口在哪里?

2.入門前必備知識了解:IOC和AOP

一、我們從哪里開始

1.準備工作:在官網上下載了Spring源代碼之后,導入Eclipse,以方便查詢。

2.打開我們使用Spring的項目工程,找到Web.xml這個網站系統配置文件,在其中找到Spring的初始化信息:

  1. <listener> 
  2.  <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> 
  3. </listener> 

由配置信息可知,我們開始的入口就這里ContextLoaderListener這個監聽器。

在源代碼中我們找到了這個類,它的定義是:

  1. public class ContextLoaderListener extends ContextLoader  
  2.  implements ServletContextListener {  
  3.     …  
  4.  /**  
  5.   * Initialize the root web application context.  
  6.   */ 
  7.  public void contextInitialized(ServletContextEvent event) {  
  8.   this.contextLoader = createContextLoader();  
  9.   if (this.contextLoader == null) {  
  10.    this.contextLoader = this;  
  11.   }  
  12.   this.contextLoader.initWebApplicationContext(event.getServletContext());  
  13.  }  
  14.   ...  
  15. }  

該類繼續了ContextLoader并實現了監聽器,關于Spring的信息載入配置、初始化便是從這里開始了,具體其他閱讀另外寫文章來深入了解。

二、關于IOC和AOP

關于Spring IOC 網上很多相關的文章可以閱讀,那么我們從中了解到的知識點是什么?

1)IOC容器和AOP切面依賴注入是Spring是核心。

IOC容器為開發者管理對象之間的依賴關系提供了便利和基礎服務,其中Bean工廠(BeanFactory)和上下文(ApplicationContext)就是IOC的表現形式

BeanFactory是個接口類,只是對容器提供的最基本服務提供了定義,而DefaultListTableBeanFactory、XmlBeanFactory、ApplicationContext等都是具體的實現。

接口:

  1. public interface BeanFactory {  
  2.  //這里是對工廠Bean的轉義定義,因為如果使用bean的名字檢索IOC容器得到的對象是工廠Bean生成的對象,  
  3.  //如果需要得到工廠Bean本身,需要使用轉義的名字來向IOC容器檢索  
  4.  String FACTORY_BEAN_PREFIX = "&";  
  5.  //這里根據bean的名字,在IOC容器中得到bean實例,這個IOC容器就象一個大的抽象工廠,用戶可以根據名字得到需要的bean  
  6.  //在Spring中,Bean和普通的JAVA對象不同在于:  
  7.  //Bean已經包含了我們在Bean定義信息中的依賴關系的處理,同時Bean是已經被放到IOC容器中進行管理了,有它自己的生命周期  
  8.  Object getBean(String name) throws BeansException;  
  9.  //這里根據bean的名字和Class類型來得到bean實例,和上面的方法不同在于它會拋出異常:如果根名字取得的bean實例的Class類型和需要的不同的話。  
  10.  Object getBean(String name, Class requiredType) throws BeansException;  
  11.  //這里提供對bean的檢索,看看是否在IOC容器有這個名字的bean  
  12.  boolean containsBean(String name);  
  13.  //這里根據bean名字得到bean實例,并同時判斷這個bean是不是單件,在配置的時候,默認的Bean被配置成單件形式,如果不需要單件形式,需要用戶在Bean定義信息中標注出來,這樣IOC容器在每次接受到用戶的getBean要求的時候,會生成一個新的Bean返回給客戶使用 - 這就是Prototype形式  
  14.  boolean isSingleton(String name) throws NoSuchBeanDefinitionException;  
  15.  //這里對得到bean實例的Class類型  
  16.  Class getType(String name) throws NoSuchBeanDefinitionException;  
  17.  //這里得到bean的別名,如果根據別名檢索,那么其原名也會被檢索出來  
  18.  String[] getAliases(String name);  

實現:

XmlBeanFactory的實現是這樣的:

  1. public class XmlBeanFactory extends DefaultListableBeanFactory {  
  2.  //這里為容器定義了一個默認使用的bean定義讀取器,在Spring的使用中,Bean定義信息的讀取是容器初始化的一部分,但是在實現上是和容器的注冊以及依賴的注入是分開的,這樣可以使用靈活的 bean定義讀取機制。  
  3.  private final XmlBeanDefinitionReader reader = new XmlBeanDefinitionReader(this);  
  4.  //這里需要一個Resource類型的Bean定義信息,實際上的定位過程是由Resource的構建過程來完成的。  
  5.  public XmlBeanFactory(Resource resource) throws BeansException {  
  6.  this(resource, null);  
  7.  }  
  8.  //在初始化函數中使用讀取器來對資源進行讀取,得到bean定義信息。這里完成整個IOC容器對Bean定義信息的載入和注冊過程  
  9.  public XmlBeanFactory(Resource resource, BeanFactory parentBeanFactory) throws 
  10.  BeansException {  
  11.  super(parentBeanFactory);  
  12.  this.reader.loadBeanDefinitions(resource);  

我們可以看到IOC容器使用的一些基本過程:

如:DefaultListableBeanFactory

  1. ClassPathResource res = new ClassPathResource("beans.xml");//讀取配置文件  
  2. DefaultListableBeanFactory factory = new DefaultListableBeanFactory();  
  3. XmlBeanDefinitionReader reader = new XmlBeanDefinitionReader(factory);  
  4. reader.loadBeanDefinitions(res);  

這些代碼演示了以下幾個步驟:

1. 創建IOC配置文件的抽象資源

2. 創建一個BeanFactory,這里我們使用DefaultListableBeanFactory;

3. 創建一個載入bean定義信息的讀取器,這里使用XmlBeanDefinitionReader來載入XML形式的bean定義信息,配置給BeanFactory;

4. 從定義好的資源位置讀入配置信息,具體的解析過程由XmlBeanDefinitionReader來完成,這樣完成整個載入和注冊bean定義的過程。我們的IoC容器就建立起來了。

再簡單的說,我的系統在啟動時候,會完成的動作就是:

1.由ResourceLoader獲取資源文件,也即bean的各種配置文件;

2.由BeanDefintion對配置文件的定義信息的載入;

3.用BeanDefinitionRegistry接口來實現載入bean定義信息并向IOC容器進行注冊。

注意,IOC容器和上下文的初始化一般不包含Bean的依賴注入的實現。

2)AOP這個過程并不是在注冊bean的過程實現的。

我們只看到在處理相關的Bean屬性的時候,使用了RuntimeBeanReference對象作為依賴信息的紀錄。

在IOC容器已經載入了用戶定義的Bean信息前提下,這個依賴注入的過程是用戶第一次向IOC容器索要Bean的時候觸發的,或者是我們可以在Bean定義信息中通過控制lazy-init屬性來使得容器完成對Bean的預實例化 - 這個預實例化也是一個完成依賴注入的過程。

我們說明一下過程:

1.用戶想IOC容器請求Bean。

2.系統先在緩存中查找是否有該名稱的Bean(去各個BeanFactory去查找)

3.沒有的話就去創建Bean并進行依賴注入,并且這個請求將被記錄起來。

請求Bean具體的實現:

代碼入口在DefaultListableBeanFactory的基類AbstractBeanFactory中:

  1. public Object getBean(String name, Class requiredType, final Object[] args) throwsBeansException {  
  2. ...  
  3.  Object sharedInstance = getSingleton(beanName);//先去緩存取  
  4.  if (sharedInstance != null) {  
  5.  ...  
  6.   if (containsBeanDefinition(beanName)) {  
  7.    RootBeanDefinition mergedBeanDefinition = getMergedBeanDefinition(beanName, false);  
  8.    bean = getObjectForBeanInstance(sharedInstance, name,mergedBeanDefinition);  
  9.   }  
  10.   else {  
  11.    bean = getObjectForBeanInstance(sharedInstance, name, null);  
  12.   }  
  13.  }  
  14.  else {  
  15.    
  16.  }  
  17.  
  18. ...  

注入Bean具體的實現:

具體的bean創建過程和依賴關系的注入在createBean中,這個方法在AbstractAutowireCapableBeanFactory中給出了實現:

  1. protected Object createBean(String beanName, RootBeanDefinition  
  2. mergedBeanDefinition, Object[] args)  
  3. throws BeanCreationException {  
  4.  // Guarantee initialization of beans that the current one depends on.  
  5.  // 這里對取得當前bean的所有依賴bean,確定能夠取得這些已經被確定的bean,如果沒有被創建,那么這個createBean會被這些IOC  
  6.  // getbean時創建這些bean  
  7.  if (mergedBeanDefinition.getDependsOn() != null) {  
  8.   for (int i = 0; i < mergedBeanDefinition.getDependsOn().length; i++) {  
  9.    getBean(mergedBeanDefinition.getDependsOn()[i]);  
  10.   }  
  11.  }  
  12.  ........  
  13.  // 這里是實例化bean對象的地方,注意這個BeanWrapper類,是對bean操作的主要封裝類  
  14.  if (instanceWrapper == null) {  
  15.   instanceWrapper = createBeanInstance(beanName, mergedBeanDefinition,args);  
  16.  }  
  17.  Object bean = instanceWrapper.getWrappedInstance();  
  18.  ......  
  19.  //這個populate方法,是對已經創建的bean實例進行依賴注入的地方,會使用到在loadBeanDefinition的時候得到的那些propertyValue來對bean進行注入。  
  20.  if (continueWithPropertyPopulation) {  
  21.   populateBean(beanName, mergedBeanDefinition, instanceWrapper);  
  22.  }  
  23.  //這里完成客戶自定義的對bean的一些初始化動作  
  24.  Object originalBean = bean;  
  25.  bean = initializeBean(beanName, bean, mergedBeanDefinition);  
  26.  // Register bean as disposable, and also as dependent on specified "dependsOn"beans.  
  27.  registerDisposableBeanIfNecessary(beanName, originalBean,mergedBeanDefinition);  
  28.  return bean;  
  29. }  
  30. .........  

這就是整個依賴注入的部分處理過程,在這個過程中起主要作用的是WrapperImp ,這個Wrapper不是一個簡單的對bean對象的封裝,因為它需要處理在beanDefinition中的信息來迭代的處理依賴注入。

到這里,這是簡單的,大概的對IOC和AOP進行了解,入門先到這一點便已經有了大概的印象了。

參考資料:《Spring_IOC詳解》

原文鏈接:http://blog.csdn.net/achan2090/article/details/7248043

【編輯推薦】

  1. Java多線程之消費者生產者模式
  2. 深入理解Java對象序列化
  3. 對于Java類加載過程中的順序問題探究
  4. 菜鳥入門Java語言學習的要點
  5. Java自定義范型的應用技巧

 

責任編輯:林師授 來源: achan2090的博客
相關推薦

2013-12-24 10:05:04

memcached

2021-12-26 18:30:56

嵌入式ARM鏈接

2018-11-16 16:35:19

Java源碼編程語言

2017-03-16 11:39:33

Openstack源碼姿勢

2022-10-08 08:01:17

Spring源碼服務

2017-04-05 16:40:45

2017-04-13 19:26:21

2014-07-29 09:44:58

jQuery源碼

2021-03-13 14:08:00

Hadoop 源碼HDFS

2021-12-20 07:58:59

GitHub源碼代碼

2018-03-28 16:10:23

閱讀源碼境界

2021-08-02 09:50:47

Vetur源碼SMART

2009-06-26 17:34:29

Spring入門

2017-03-27 15:15:43

Hive源碼編譯

2020-12-07 11:29:24

ReactVueVue3

2023-07-10 08:43:53

SpringIDEA

2011-02-28 13:34:51

SpringMVC

2010-05-28 14:36:24

2021-03-13 11:23:51

源碼邏輯框架

2021-09-16 10:36:34

開源技術 項目
點贊
收藏

51CTO技術棧公眾號

国产视频www| 九一在线免费观看| 久久99久久99精品免观看软件| 91视频com| 91久久久久久| 天天干在线播放| 国产大片一区| 日韩成人在线视频观看| 久久婷五月综合| 成人观看网址| 亚洲色图一区二区三区| 欧美理论一区二区| www.av黄色| 琪琪一区二区三区| 欧美亚洲另类视频| 强乱中文字幕av一区乱码| 要久久爱电视剧全集完整观看| 欧美一区二区日韩一区二区| 国产肥臀一区二区福利视频| 国产在线观看av| 久久久高清一区二区三区| 成人动漫在线观看视频| 伊人网视频在线| 欧美一级久久| 久久久女女女女999久久| 岛国片在线免费观看| 日韩人体视频| 精品久久久久99| 天天久久综合网| 国产成人精品一区二区三区视频| 无吗不卡中文字幕| 欧美a级黄色大片| 最新97超碰在线| 国产午夜精品福利| 久久波多野结衣| 刘玥91精选国产在线观看| 狠狠色狠狠色综合日日91app| 热久久视久久精品18亚洲精品| 久草免费新视频| 亚洲xxx拳头交| 在线视频日本亚洲性| 免费人成又黄又爽又色| 久久午夜影院| 亚洲国产欧美一区二区三区同亚洲| 一级黄色免费毛片| 精品中文在线| 欧美一区二区三区电影| 中文字幕55页| 高清一区二区中文字幕| 欧美二区乱c少妇| 思思久久精品视频| 91精品视频一区二区| 欧美日韩精品一区视频| 国产av人人夜夜澡人人爽| 综合日韩av| 色综合一个色综合| 日日摸日日碰夜夜爽av| 中文字幕高清在线播放| 欧美性xxxxhd| av无码精品一区二区三区| 日本成人伦理电影| 欧美视频中文一区二区三区在线观看| 成人性做爰aaa片免费看不忠| 欧美一区国产| 欧美男同性恋视频网站| 日韩欧美亚洲另类| 亚洲一区网址| 亚洲精品国产精品国自产观看浪潮| 熟妇人妻久久中文字幕| 最新国产精品视频| 一级做a爰片久久毛片美女图片| 成人激情五月天| 国产精品久久久乱弄| 欧美日本中文字幕| 精品美女久久久久| 日韩专区欧美专区| 91在线视频一区| 国产91绿帽单男绿奴| 久久综合丝袜日本网| 神马影院一区二区| 国产区在线观看| 午夜精品成人在线| 国产精品拍拍拍| 欧美一区一区| 亚洲美女久久久| 日韩一级片在线免费观看| 亚洲精品小说| 2020久久国产精品| 在线免费a视频| 成人深夜在线观看| 日韩国产欧美精品| 欧美1—12sexvideos| 色综合天天狠狠| www.成人黄色| 亚洲桃色综合影院| 久久综合久中文字幕青草| 亚洲精品77777| 免费精品视频在线| 国产亚洲福利社区| 免费的黄网站在线观看| 欧美日韩人人澡狠狠躁视频| 红桃视频 国产| 日韩aaa久久蜜桃av| 久久久国产影院| 免费视频久久久| 国产激情视频一区二区在线观看| 欧美重口乱码一区二区| 久久久123| 欧美日韩在线播放一区| 大乳护士喂奶hd| 天天久久综合| 国产精品久久国产精品99gif| 亚洲国产www| 国产精品久久久久久妇女6080| 欧美,日韩,国产在线| 精品国产乱码久久久久久樱花| 亚洲天堂免费在线| 日韩精品久久久久久久酒店| 精品一区二区三区免费视频| 日韩欧美三级电影| 成人美女视频| 精品久久久久久久人人人人传媒| 少妇高潮一区二区三区喷水| 美女被久久久| 久久久7777| 成年人黄色大片在线| 日韩一级精品视频在线观看| 日韩一级片在线免费观看| 国产一级久久| 韩国成人动漫在线观看| 一二三四区在线观看| 欧美日本免费一区二区三区| 中日韩精品一区二区三区| 亚洲精品社区| 成人在线免费网站| 在线xxxx| 欧美一区二区视频观看视频| 成人午夜免费影院| 日韩和欧美一区二区三区| 精品午夜一区二区| 美女91在线看| 亚洲精品久久久久久久久久久久久 | 日本特黄特色aaa大片免费| 国产伦精品一区二区三区免费迷 | 成a人v在线播放| 色女孩综合影院| 成人乱码一区二区三区av| 夜夜嗨网站十八久久| 国产偷久久久精品专区| xxx性欧美| 日韩精品视频在线观看免费| 国产午夜在线播放| 97久久精品人人做人人爽50路| 男人插女人视频在线观看| 极品束缚调教一区二区网站| 国模吧一区二区三区| 蜜桃久久一区二区三区| 亚洲不卡一区二区三区| 欧美xxxxx精品| 麻豆精品网站| 亚洲午夜久久久影院伊人| 成人国产精品一区二区免费麻豆 | 国产一二在线播放| 日韩高清不卡av| 成年人av网站| 国产精品人成在线观看免费| 99九九99九九九99九他书对| 国产精品久久久久9999赢消| 51国偷自产一区二区三区| 国产一线二线在线观看| 日韩电视剧在线观看免费网站| 天天综合天天干| 日本一区二区三区视频视频| 特黄视频免费观看| 红桃视频亚洲| 欧美美乳视频网站在线观看| 巨大黑人极品videos精品| 久久中文精品视频| 色婷婷av一区二区三区之e本道| 精品久久久久久久久久久| 日本一卡二卡在线播放| 国产在线视视频有精品| 久久久久久免费看| 精品免费一区二区| 91视频最新| 周于希免费高清在线观看| 中文字幕欧美日韩在线| 亚洲av永久无码国产精品久久| 精品久久久久久电影| 东京热无码av男人的天堂| 国产精品69毛片高清亚洲| 国产91在线免费| 欧美在线观看视频一区| 成人免费在线看片| 欧美成a人片在线观看久| 欧美xxxx做受欧美| 欧美高清电影在线| 日韩欧美电影一区| 最新中文字幕在线观看视频| 一区二区激情视频| 微拍福利一区二区| 成人免费毛片app| 一道本在线免费视频| 亚洲国产日本| 伊人av成人| 亚洲人成亚洲精品| 91免费在线观看网站| 日本一区免费网站| 97视频在线免费观看| 看女生喷水的网站在线观看| 亚洲精品自拍第一页| 国产xxxx孕妇| 欧美无乱码久久久免费午夜一区 | 国产伦精品一区二区三区视频免费 | 四虎影视在线观看2413| 91麻豆精品国产综合久久久久久| 国产又大又黄又粗| 亚洲资源中文字幕| 美国一级片在线观看| 久久嫩草精品久久久精品一| 动漫av在线免费观看| 麻豆精品国产传媒mv男同| 日日摸日日碰夜夜爽av| 亚洲国产片色| 日韩亚洲欧美视频| 影音先锋成人在线电影| 天天久久人人| 久久不见久久见国语| 精品视频高清无人区区二区三区| 日韩中文字幕一区二区高清99| 国产精品啪视频| 456成人影院在线观看| 97精品国产97久久久久久| 久久亚洲资源| 久久69精品久久久久久久电影好 | 国产精品一香蕉国产线看观看 | 欧美视频不卡| 亚洲色图都市激情| 91精品综合| 天天综合中文字幕| 国产精品久久久久久麻豆一区软件| 日韩亚洲一区在线播放| 精品国产91乱码一区二区三区四区 | 一本色道久久综合亚洲精品酒店| 国产三区精品| 99久久久久成人国产免费| 亚洲欧美日本日韩| 久久99久久99精品| 亚洲无毛电影| 国产原创中文在线观看 | 中文字幕在线视频一区二区三区| 99热这里只有精品首页| 亚洲在线www| 成人国产精品久久| 亚洲一区二区三区在线视频| 四虎地址8848精品| 成人两性免费视频| 欧美一区在线观看视频| 2014亚洲精品| 成人直播在线观看| 国产精品一区在线观看| 久久久久观看| 欧美在线日韩精品| 欧美成人直播| 高清无码一区二区在线观看吞精| 极品尤物久久久av免费看| 国产成人永久免费视频| 亚洲三级视频| 日韩中文字幕免费在线| 青娱乐精品视频在线| 福利视频999| 国产成人免费视频网站高清观看视频 | 紧缚奴在线一区二区三区| www.51色.com| 成人精品视频一区| 黄色aaa视频| 一区在线播放视频| 午夜偷拍福利视频| 91久久免费观看| 国产伦精品一区二区三区免.费| 日韩视频国产视频| 日韩精品系列| 日韩中文在线观看| 999精品网| 国产精品狼人色视频一区| 国产电影一区二区| 久久九九视频| 亚洲先锋影音| 日韩欧美在线播放视频| 另类小说一区二区三区| av免费观看不卡| 欧美国产在线观看| 久久久久久久国产精品毛片| 色8久久人人97超碰香蕉987| 国产欧美久久久| 亚洲精品资源美女情侣酒店| а√中文在线8| 热久久视久久精品18亚洲精品| 99精品国产九九国产精品| 国内精品视频免费| 欧美a级成人淫片免费看| av在线com| 日韩成人av影视| aaa黄色大片| 国产精品九色蝌蚪自拍| 国产精品男女视频| 欧美一区二区视频在线观看2022| 欧美巨乳在线| 欧美激情免费视频| 久久人体av| 奇米精品在线| 在线欧美三区| 一区二区三区国产好的精华液| 久久嫩草精品久久久久| 久久久久久久伊人| 制服丝袜一区二区三区| 成人免费在线电影| 26uuu亚洲国产精品| 亚洲视频一起| 在线综合视频网站| 久久影院亚洲| 亚洲最大的黄色网| 一个色在线综合| 国产精品色综合| 色婷婷综合久久久久| 自拍网站在线观看| 国产三级精品在线不卡| 国产一区二区三区四区三区四| 亚洲天堂2018av| 国产日韩欧美综合在线| av中文在线播放| 亚洲爱爱爱爱爱| 日本动漫同人动漫在线观看| 国产主播精品在线| 第四色成人网| 日日噜噜夜夜狠狠| 欧美国产一区二区| 日韩精选在线观看| 亚洲欧美日韩中文视频| 亚洲精品mv| 久草精品电影| 国产精品人人爽人人做我的可爱| 潘金莲一级淫片aaaaa| 亚洲精品免费播放| 国产视频在线一区| 欧美成人一区二区三区电影| 久久三级中文| 国产一二三区在线播放| 国产福利一区二区三区视频在线| 国产精品三区在线观看| 日韩欧美一区在线| 久久一卡二卡| 好吊色欧美一区二区三区视频 | 欧美在线一区二区三区四| 欧美挤奶吃奶水xxxxx| 成熟丰满熟妇高潮xxxxx视频| 91一区二区三区在线观看| 在线观看亚洲天堂| 亚洲男人的天堂网站| 台湾成人免费视频| 一区二区免费在线视频| 国产一区二区精品久久| 男女做暖暖视频| 精品国产髙清在线看国产毛片 | 精品露脸国产偷人在视频| 神马精品久久| 国产精品永久免费视频| 欧美成人首页| 日韩aaaaa| 欧美在线你懂得| 成人影欧美片| 精品午夜一区二区| 免费一区二区视频| www.超碰在线观看| 日韩电影免费观看中文字幕| 成人在线观看免费播放| a级片一区二区| 97精品国产露脸对白| 欧美视频xxxx| 欧美成年人视频网站| 日韩aaa久久蜜桃av| 成年网站免费在线观看| 一区二区三区四区在线免费观看| 三级国产在线观看| 成人国产精品一区二区| 激情成人综合| 精品无码在线观看| 日韩美女天天操| 免费观看成人性生生活片| 国产树林野战在线播放| av电影一区二区| 亚洲中文字幕一区二区| 国内精品小视频在线观看| 残酷重口调教一区二区| 亚洲欧美高清在线| 欧美性淫爽ww久久久久无| 爱情岛亚洲播放路线| 亚洲欧美日产图| aaa亚洲精品| 国产伦精品一区二区三区免.费|