Guice 的架构分成两个不同的阶段:启动和运行。

1.启动阶段

执行流程如下:
1)首先创建自定义模块类实例,并将其传入 Guice.createInjector()
2Guice 创建一个绑定器Binder,并将其传入自定义模块。
3)自定义模块使用绑定器来定义绑定。
4)基于自定义模块所定义的绑定,Guice 创建一个注入器Injector,并将其返回给自定义模块。
5)自定义模块使用注入器来注入对象。
2 .运行阶段
可以使用启动阶段创建的注入器来注入对象并内省(introspect)我们的绑定。Guice运行时的模型 由一个可 管理一定数量绑定的注入器 组成 Guice运行模型如图1所示。
Guice的架构分析_第1张图片
1  Guice运行模型
Key键唯一地 确定 每一个绑定,它包含了客户代码所依赖的类型及一个可选的标注,可以使用标注来区分指向同一类型的 多个 绑定。Key的类型和标注对应于注入时的类型和标注。
每个绑定有一个提供器provider,它提供所需类型的实例。我们可以定义一个类,Guice会创建它的实例。也可以给Guice一个需要绑定的 类的 实例,同时还可以实现我们自己的providerGuice可以向其中注入依赖关系。
每个绑定还有一个可选的作用域。缺省情况下绑定没有作用域,Guice为每一次注入创建一个新的对象,定制的作用域可以使我们控制 Guice 是否 创建新对象。例如,为每一个HttpSession创建一个实例。

1  Guice启动阶段执行流程

下面我们来学习Guice是如何工作的,先来看一下Guice对接口及其实现类之间的绑定。Guice执行流程如下:
1)根据业务需求定义业务接口及其实现类。
2)定义Module接口实现类,并覆盖Module接口中的configure方法,同时通过Binder类进行具体绑定。我们将Module接口实现类称为绑定类。
接口绑定类 代码 1 所示。
代码 1  接口绑定类
public class 绑定类implements Module {
         public void configure(Binder binder) {
                  binder.bind(接口.class).to(实现类.class);
         }
}
3调用com.google.inject包中的Guice类,通过此类的createInjector方法来实现一个简单的注入,代码12-2所示
代码 2  注入方法createInjector
Guice.createInjector(new Bind())
4调用绑定接口实现接口和实现类的依赖注入 代码 3 所示。
代码 3  取得注入方法
Guice.createInjector(new Bind()).getInstance(接口类);
使用Guice进行接口绑定如2所示。
2  使用Guice进行接口绑定
Guice的架构分析_第2张图片

体验Guice

从上文读者已经了解Guice的执行流程,本节我们将通过一个输出语句来进一步学习Guice
定义接口及其实现类分别为SunyangSunyangImpl,绑定类为Bind,如代码45所示。
代码 4   接口Sunyang
package sunyang;
 
public interface Sunyang {
         public void print();
}
代码 5   接口实现类SunyangImpl
package sunyang;
 
public class SunyangImpl implements Sunyang {
         public void print() {
                  System.out.println("技术凝聚实力,专业创造辉煌");
         }
}
实现Module接口的类Bind如代码6所示。
代码 6  Bind.java
package sunyang.Module;
import sunyang.Sunyang;
import sunyang.SunyangImpl;
import com.google.inject.Binder;
import com.google.inject.Module;
public class Bind implements Module {
         public void configure(Binder binder) {
                  binder.bind(Sunyang.class).to(SunyangImpl.class);
         }
   public static void main(String[] args) {
                  Guice.createInjector(new Bind()).getInstance(Sunyang.class).print();
         }
 
}
在这段代码的main方法中得到类里边被注入的接口Sunyang,然后执行它的print方法。执行这个main方法得到的如图12-3所示的结果。
Guice的架构分析_第3张图片
3  使用成员变量注入
 
 
 
吉林省三扬科技咨询有限公司-长春JAVA培训|Java培训|PHP培训|3G培训|长春三扬java培训|长春培训|C++培训|嵌入式培训|ORACLE培训|软件测试培训|.Net培训|游戏培训|嵌入式LINUX培训|数据库培训|大学生IT培训||软件培训|IT培训|IT就业培训|软件工程师培训|程序员培训|电脑培训|IT认证培训|大学生就业培训|职业技能培训|IT业余班|周末班培训