最近在学习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实现的原理
guice 学习资料,快速掌握guice的编程技巧以及了解其机制。
guice.jar guice.jar guice.jar guice.jar guice.jar guice.jar guice.jar
NULL 博文链接:https://wxbin-perfect.iteye.com/blog/2178647
赠送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;...
赠送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文档-中文(简体)版...
Guice是Google开发的一个轻量级,基于Java5(主要运用泛型与注释特性)的依赖注入框架(IOC)。Guice非常小而且快。Guice是类型安全的,它能够对构造函数,属性,方法(包含任意个参数的任意方法,而不仅仅是setter...
Guice用户中文指南,Guice (读作"juice")是超轻量级的,下一代的,为Java 5及后续版本设计的依赖注入容器
学习ext ext4 extjs4的好程序,学习guice的好程序,学习mybatis的好程序,有很多可以借鉴的地方,jar包列表对应的博客文章中有。
* 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开发手册, Guice中文开发手册
赠送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文档-中文(简体)-...
赠送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-3.0,轻量级IOC容器,包含guice-3.0.jar、guice-spring-3.0.jar、guice-struts2-plugin-3.0.jar
赠送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整合起来的一个例子。
shiro,guice集成,官方资料,精准全面
java8集合源码动机.md 动机 将所有内容连接在一起是应用程序开发的乏味部分。 有几种方法可以将数据、服务和表示类相互连接起来。 为了对比这些方法,我们将为披萨订购网站编写计费代码: public interface ...