google guice 高级教程01 -凯发k8网页登录

关注后端架构、中间件、分布式和并发编程

   :: 凯发k8网页登录首页 :: 新随笔 :: 联系 :: 聚合  :: 管理 ::
  111 随笔 :: 10 文章 :: 2680 评论 :: 0 trackbacks

,一个号称比快100倍的ioc容器。某不才,也愿意跟随大家一起学习guice的思想,如果能够在此过程中有所收获就达到了我们的目的。如果能够深刻理会背后的思想并能熟练掌握运用,甚至写出一个更棒的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的插件,允许通过来绘制guice对象的依赖关系图形]
│  │  ├─src
│  │  │  └─com
│  │  │      └─google
│  │  │          └─inject
│  │  │              └─grapher
│  │  │                  └─graphviz
│  │  └─test
│  │      └─com
│  │          └─google
│  │              └─inject
│  │                  └─grapher
│  │                      └─demo
│  ├─jmx [guice的插件,这个可以很方便的将凯发k8网页登录的服务发布成一个mbean,这样就可以远程控制凯发k8网页登录的服务了]
│  │  ├─src
│  │  │  └─com
│  │  │      └─google
│  │  │          └─inject
│  │  │              └─tools
│  │  │                  └─jmx
│  │  └─test
│  │      └─com
│  │          └─google
│  │              └─inject
│  │                  └─tools
│  │                      └─jmx
│  ├─jndi [guice的插件,这个可以将凯发k8网页登录的服务注入到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的插件]
│  ├─lib
│  │  └─build
│  ├─src
│  │  └─com
│  │      └─google
│  │          └─inject
│  │              └─servlet
│  └─test
│      └─com
│          └─google
│              └─inject
│                  └─servlet
├─spring [guice的插件]
│  ├─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的插件]
│  ├─example
│  │  ├─root
│  │  │  └─web-inf
│  │  │      └─classes
│  │  └─src
│  │      └─com
│  │          └─google
│  │              └─inject
│  │                  └─struts2
│  │                      └─example
│  ├─lib
│  └─plugin
│      └─src
│          └─com
│              └─google
│                  └─inject
│                      └─struts2
└─test [guice的测试代码]
    └─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使用了来将这两个库包含在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. :
上一篇:
下一篇:

©2009-2014 imxylz
|求贤若渴
posted on 2010-01-04 23:45 imxylz 阅读(29138) 评论(0)     所属分类: google guice

©2009-2014
网站地图