<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    xylz,imxylz

    關注后端架構、中間件、分布式和并發編程

       :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
      111 隨筆 :: 10 文章 :: 2680 評論 :: 0 Trackbacks

    Google Guice,一個號稱比Spring快100倍的IOC容器。某不才,也愿意跟隨大家一起學習Guice的思想,如果能夠在此過程中有所收獲就達到了我們的目的。如果能夠深刻理會IOC背后的思想并能熟練掌握運用,甚至寫出一個更棒的IOC容器那就更美好了。如果大家想學基礎教程的,可以參考前面的文章

    5 源碼目錄

    我們從一份源碼清單開始我們的Guice高級學習內容。下面的目錄樹是Guice 2.0的源碼目錄。

    C:\USERS\XYLZ\BOOKS\GUICE\GUICE-2.0-SRC
    ├─examples [guice的一個XML實例,主要描述從xml中加載bean的過程]
    │  └─src
    │      └─example
    │          └─xml
    ├─extensions [guice的官方插件]
    │  ├─assistedinject [guice注入的一個助手插件,這個插件可以幫助我們生成一個工廠對象,而我們能夠根據此工程對象生成我們所需要的實際對象]
    │  │  ├─src
    │  │  │  └─com
    │  │  │      └─google
    │  │  │          └─inject
    │  │  │              └─assistedinject
    │  │  └─test
    │  │      └─com
    │  │          └─google
    │  │              └─inject
    │  │                  └─assistedinject
    │  ├─grapher [guice的Graphviz插件,允許通過Graphviz來繪制guice對象的依賴關系圖形]
    │  │  ├─src
    │  │  │  └─com
    │  │  │      └─google
    │  │  │          └─inject
    │  │  │              └─grapher
    │  │  │                  └─graphviz
    │  │  └─test
    │  │      └─com
    │  │          └─google
    │  │              └─inject
    │  │                  └─grapher
    │  │                      └─demo
    │  ├─jmx [guice的jmx插件,這個可以很方便的將我們的服務發布成一個MBean,這樣就可以遠程控制我們的服務了]
    │  │  ├─src
    │  │  │  └─com
    │  │  │      └─google
    │  │  │          └─inject
    │  │  │              └─tools
    │  │  │                  └─jmx
    │  │  └─test
    │  │      └─com
    │  │          └─google
    │  │              └─inject
    │  │                  └─tools
    │  │                      └─jmx
    │  ├─jndi [guice的jndi插件,這個可以將我們的服務注入到jndi容器中,也算是guice與j2ee的一點聯系吧]
    │  │  └─src
    │  │      └─com
    │  │          └─google
    │  │              └─inject
    │  │                  └─jndi
    │  ├─multibindings [guice的多綁定插件,允許綁定一系列的對象Set或者Map,從而可以一次性的獲取對象Set或者Map,當然僅針對同一類型對象]
    │  │  ├─src
    │  │  │  └─com
    │  │  │      └─google
    │  │  │          └─inject
    │  │  │              └─multibindings
    │  │  └─test
    │  │      └─com
    │  │          └─google
    │  │              └─inject
    │  │                  └─multibindings
    │  └─throwingproviders [guice的一個異常處理插件,這個插件允許提供一個Provider來處理實例化類拋出的異常]
    │      ├─src
    │      │  └─com
    │      │      └─google
    │      │          └─inject
    │      │              └─throwingproviders
    │      └─test
    │          └─com
    │              └─google
    │                  └─inject
    │                      └─throwingproviders
    ├─javadoc [guice的javadoc文檔]
    │  ├─com
    │  │  └─google
    │  │      └─inject
    │  │          ├─assistedinject
    │  │          ├─binder
    │  │          ├─jndi
    │  │          ├─matcher
    │  │          ├─multibindings
    │  │          ├─name
    │  │          ├─servlet
    │  │          ├─spi
    │  │          ├─spring
    │  │          ├─throwingproviders
    │  │          ├─tools
    │  │          │  └─jmx
    │  │          └─util
    │  └─resources
    ├─lib [guice編譯依賴的第三方jar包]
    │  └─build
    ├─servlet [guice的Servlet插件]
    │  ├─lib
    │  │  └─build
    │  ├─src
    │  │  └─com
    │  │      └─google
    │  │          └─inject
    │  │              └─servlet
    │  └─test
    │      └─com
    │          └─google
    │              └─inject
    │                  └─servlet
    ├─spring [guice的Spring插件]
    │  ├─src
    │  │  └─com
    │  │      └─google
    │  │          └─inject
    │  │              └─spring
    │  └─test
    │      └─com
    │          └─google
    │              └─inject
    │                  └─spring
    ├─src [guice的核心代碼]
    │  └─com
    │      └─google
    │          ├─common
    │          │  ├─base
    │          │  └─collect
    │          └─inject
    │              ├─binder
    │              ├─internal
    │              ├─jndi
    │              ├─matcher
    │              ├─name
    │              ├─spi
    │              ├─tools
    │              │  └─jmx
    │              └─util
    ├─struts2 [guice的Struts 2插件]
    │  ├─example
    │  │  ├─root
    │  │  │  └─WEB-INF
    │  │  │      └─classes
    │  │  └─src
    │  │      └─com
    │  │          └─google
    │  │              └─inject
    │  │                  └─struts2
    │  │                      └─example
    │  ├─lib
    │  └─plugin
    │      └─src
    │          └─com
    │              └─google
    │                  └─inject
    │                      └─struts2
    └─test [guice的junit測試代碼]
        └─com
            ├─google
            │  └─inject
            │      ├─commands
            │      ├─example
            │      ├─internal
            │      ├─matcher
            │      ├─name
            │      ├─spi
            │      ├─tools
            │      │  └─jmx
            │      └─util
            └─googlecode
                └─guice

    其實我們可以從guice的測試用例去學習guice的用法,這里就不談了。

    首先我們編譯guice的源碼。

    ant dist

    我們看看生成的文件。

    C:\USERS\XYLZ\BOOKS\GUICE\GUICE-2.0-SRC\BUILD
    │  classes.bar
    │  guice-2.0-src.jar
    │  guice-2.0-src.zip
    │  guice-2.0.zip
    │  guice-with-deps.jar
    │ 
    ├─classes
    │  └─com
    ├─dist
    │  │  aopalliance.jar
    │  │  COPYING
    │  │  guice-2.0.jar
    │  │  guice-assistedinject-2.0-src.jar
    │  │  guice-assistedinject-2.0.jar
    │  │  guice-jmx-2.0-src.jar
    │  │  guice-jmx-2.0.jar
    │  │  guice-jndi-2.0-src.jar
    │  │  guice-jndi-2.0.jar
    │  │  guice-multibindings-2.0-src.jar
    │  │  guice-multibindings-2.0.jar
    │  │  guice-servlet-2.0-src.jar
    │  │  guice-servlet-2.0.jar
    │  │  guice-spring-2.0-src.jar
    │  │  guice-spring-2.0.jar
    │  │  guice-struts2-plugin-2.0-src.jar
    │  │  guice-struts2-plugin-2.0.jar
    │  │  guice-throwingproviders-2.0-src.jar
    │  │  guice-throwingproviders-2.0.jar
    │  │ 
    │  └─javadoc
    ├─javadoc
    ├─javadoc-core
    └─META-INF
            MANIFEST.MF

    在這里我們可以看到除了生成guice的jar包和源碼外,還包括各個插件的jar包和源碼以及javadoc文檔。

    這里需要特別說明的是guice內部使用了cglib-2.2.1-snapshot.jar和asm-3.1.jar,由于這兩個包非常常見,為了不與其他jar包依賴的這兩個庫沖突,guice使用了jarjar來將這兩個庫包含在guice內部的com.google.inject.internal.cglib包和com.google.inject.internal.asm包中。這個過程是在common.xml中的如下段完成的。


    <taskdef name="jarjar" classname="com.tonicsystems.jarjar.JarJarTask"

    classpath
    ="${common.basedir}/lib/build/jarjar-1.0rc8.jar"/>

    <jarjar jarfile="${build.dir}/${ant.project.name}-with-deps.jar">

    <fileset dir="${build.dir}/classes"/>

    <zipfileset src="${common.basedir}/lib/build/cglib-2.2.1-snapshot.jar"/>

    <zipfileset src="${common.basedir}/lib/build/asm-3.1.jar"/>

    <rule pattern="net.sf.cglib.**" result="com.google.inject.internal.cglib.@1"/>

    <rule pattern="org.objectweb.asm.**" result="com.google.inject.internal.asm.@1"/>

    <keep pattern="com.google.inject.**"/>

    </jarjar>

    Guice的源碼目錄結構大體如此(各個包和類的介紹在后面中會具體談到),下一節中我們開始Guice的IOC體系。

    參考資源:

    1. Google Guice
    2. Spring
    3. Google Guice 入門教程01 - 依賴注入(1)
    4. Martin Fowler:Inversion of Control Containers and the Dependency Injection pattern
    5. Graphviz
    6. jmx
    7. jndi
    8. Servlet
    9. Struts 2
    10. junit
    11. jarjar
    上一篇: Google Guice 入門教程08 - 整合第三方組件(2)
    下一篇: Google Guice 高級教程02 - Guice的IOC容器(1)

    ©2009-2014 IMXYLZ |求賢若渴
    posted on 2010-01-04 23:45 imxylz 閱讀(29219) 評論(0)  編輯  收藏 所屬分類: Google Guice

    ©2009-2014 IMXYLZ
    主站蜘蛛池模板: 亚洲一区中文字幕| 亚洲国产综合精品| 一级毛片不卡免费看老司机| 国产又大又长又粗又硬的免费视频| 久久久久国色AV免费观看性色| 国产免费一区二区三区VR| 亚洲色偷偷综合亚洲av78| 精品国产精品久久一区免费式| 亚洲精品你懂的在线观看| xxxxxx日本处大片免费看| 亚洲综合色区在线观看| 国产裸体美女永久免费无遮挡| 91情侣在线精品国产免费| 亚洲精品第一国产综合境外资源 | 亚洲国产精品狼友中文久久久| 久久国产亚洲高清观看| 中文字幕在线免费观看| 亚洲精品WWW久久久久久| a一级毛片免费高清在线| 国产精品亚洲片在线观看不卡| 亚洲6080yy久久无码产自国产 | 亚洲热妇无码AV在线播放| 91视频精品全国免费观看| 亚洲av色福利天堂| 国产免费女女脚奴视频网| 亚洲精品无码久久| 亚洲国产综合久久天堂| 亚洲娇小性色xxxx| www亚洲精品少妇裸乳一区二区| 夜夜亚洲天天久久| 女人18毛片水真多免费播放| 免费一级毛suv好看的国产网站| 免费无码又爽又刺激聊天APP| 中文字幕亚洲精品| 一区二区免费电影| 全部免费a级毛片| 99精品视频在线观看免费播放| 国产精品亚洲精品日韩已方| 国产成人精品无码免费看| 亚洲另类无码专区丝袜| 在线观看免费高清视频|