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.getInstance(Service.class)