`

【源码学习】Guice 学习笔记(一)

阅读更多
    最近在学习Guice的源码,尝试写写blog,做做笔记!

一、先简单介绍下
    使用Google Guice作为IOC容器已有一段时间了,当前感觉良好。整合mybatis、struts2什么的也非常方便,个人感觉它甚至比spring方便,用起来没啥觉得不爽的。

    优点:体积小巧,代码量少,方便我深入学习源码;其次,是Google开源出来的组件,代码质量和性能应该都有保障,值得我使用和深入学习。

    不足:guice更新频率较低,但亦无妨啦,目前就很好用了,当然我也希望它可以更好。目前它的最新版本是3.0,我这次学习源码也是找了3.0,项目地址在 http://code.google.com/p/google-guice


二、目前发现的几个关键类
com.google.inject.TypeLiteral:工具类,对java类型泛型相关的类型提供更精准的定义。
com.google.inject.internal.MoreTypes:工具类,里面有ParameterizedTypeImpl、GenericArrayTypeImpl和WildcardTypeImpl这3个静态类,用于转化为Guice内的规范化的类。
com.google.inject.util.Types:也是一个工具类,有点像个工厂,主要生产MoreTypes里面那3个静态类相关的实例。
com.google.inject.Key:感觉最重要,从Guice中最终都是要通过Key来获取对应Class的Instance。
com.google.inject.internal.BindingImpl:和Key对应,绑定的Key的对应实现。
com.google.inject.spi.InjectionPoint:注入点,用于识别构造方法、普通方法和属性的注入位置。
com.google.inject.spi.Dependency:貌似用于记录有哪些InjectionPoint,后面用来做清理工作的? 

嗯,上面也仅是我一知半解的猜测,后面深入学习后再进一步看看是否猜对了。


三、关于初始化
Guice.createInjector(
    new Module() {
        public void configure(Binder binder) {
             binder.bind(Service.class).to(DemoService.class);
        }
    }
);

我们一般会这样实例化Injector,Guice内部调用Module内的configure方法,接着binder.bind(Service.class).to(DemoService.class)会把Service.class按一定的算法转化为Key,DemoService.class转化为BindingImpl,并把Key和BindingImpl关联起来,后面注入再用。更多的细节在InjectorShell.Builder#build方法,不过我还没具体看完。


四、关于获取Instance
injector.getInstance(Service.class)

一般是用上面这个方式来获取Instance(实际项目中应该不需要我们显示调用的,例如web项目的struts2 + guice + mybatis可以把组件全托管给guice,不需要我们显式获取实例,这里只是做个简介),Service.class会被转化为Key,然后根据Key获得BindingImpl,然后再获得provider,接着provider.get()就获得Instance了。核心在InjectorImpl#getProvider方法。

好,今晚先写这么多了!!!
分享到:
评论

相关推荐

    google guice 3.0源码

    google guice 3.0源码,官方下载,帮助你更好理解google guice实现的原理

    guice入门学习资料

    guice 学习资料,快速掌握guice的编程技巧以及了解其机制。

    guice.jar/guice.jar

    guice.jar guice.jar guice.jar guice.jar guice.jar guice.jar guice.jar

    jersey2.15集成guice笔记

    NULL 博文链接:https://wxbin-perfect.iteye.com/blog/2178647

    guice-assistedinject-3.0-API文档-中英对照版.zip

    赠送jar包:guice-assistedinject-3.0.jar; 赠送原API文档:guice-assistedinject-3.0-javadoc.jar; 赠送源代码:guice-assistedinject-3.0-sources.jar; 赠送Maven依赖信息文件:guice-assistedinject-3.0.pom;...

    guice-4.0-API文档-中文版.zip

    赠送jar包:guice-4.0.jar; 赠送原API文档:guice-4.0-javadoc.jar; 赠送源代码:guice-4.0-sources.jar; 赠送Maven依赖信息文件:guice-4.0.pom; 包含翻译后的API文档:guice-4.0-javadoc-API文档-中文(简体)版...

    google guice基础例子

    Guice是Google开发的一个轻量级,基于Java5(主要运用泛型与注释特性)的依赖注入框架(IOC)。Guice非常小而且快。Guice是类型安全的,它能够对构造函数,属性,方法(包含任意个参数的任意方法,而不仅仅是setter...

    Guice用户中文指南

    Guice用户中文指南,Guice (读作"juice")是超轻量级的,下一代的,为Java 5及后续版本设计的依赖注入容器

    ext extjs4学习经典实例 guice mybaits 简单权限 (无ext资源包和jar包)

    学习ext ext4 extjs4的好程序,学习guice的好程序,学习mybatis的好程序,有很多可以借鉴的地方,jar包列表对应的博客文章中有。

    Google Guice: Agile Lightweight Dependency Injection Framework

    * What the future has in store, including Guice IDE, the next Guice version and the standardization of Guice's concepts through JSR 299. * How you can build real world, Guice-powered web ...

    Guice_1.0_Manual.pdf

    Guice开发手册, Guice中文开发手册

    guice-3.0-API文档-中英对照版.zip

    赠送jar包:guice-3.0.jar; 赠送原API文档:guice-3.0-javadoc.jar; 赠送源代码:guice-3.0-sources.jar; 赠送Maven依赖信息文件:guice-3.0.pom; 包含翻译后的API文档:guice-3.0-javadoc-API文档-中文(简体)-...

    guice-multibindings-3.0-API文档-中文版.zip

    赠送jar包:guice-multibindings-3.0.jar; 赠送原API文档:guice-multibindings-3.0-javadoc.jar; 赠送源代码:guice-multibindings-3.0-sources.jar; 赠送Maven依赖信息文件:guice-multibindings-3.0.pom; ...

    guice-2.0.jar

    guice-2.0.jar guice-2.0.jar

    guice-3.0.rar

    guice-3.0,轻量级IOC容器,包含guice-3.0.jar、guice-spring-3.0.jar、guice-struts2-plugin-3.0.jar

    guice-3.0-API文档-中文版.zip

    赠送jar包:guice-3.0.jar; 赠送原API文档:guice-3.0-javadoc.jar; 赠送源代码:guice-3.0-sources.jar; 赠送Maven依赖信息文件:guice-3.0.pom; 包含翻译后的API文档:guice-3.0-javadoc-API文档-中文(简体)版...

    struts2 整合guice

    把struts2和guice整合起来的一个例子。

    shiro,guice集成

    shiro,guice集成,官方资料,精准全面

    java8集合源码-guice-doc:guice文档

    java8集合源码动机.md 动机 将所有内容连接在一起是应用程序开发的乏味部分。 有几种方法可以将数据、服务和表示类相互连接起来。 为了对比这些方法,我们将为披萨订购网站编写计费代码: public interface ...

Global site tag (gtag.js) - Google Analytics