Google Guice 高级教程01 - 源码目录

Google Guice,一个号称比Spring快100倍的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. Martin Fowler:Inversion of Control Containers and the Dependency Injection pattern
  4. Graphviz
  5. jmx
  6. jndi
  7. Servlet
  8. Struts 2
  9. junit
  10. jarjar

你可能感兴趣的:(Google Guice)