Guice的架构分析

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

1.启动阶段

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

从上文读者已经了解 Guice 的执行流程,本节我们将通过一个输出语句来进一步学习 Guice
定义接口及其实现类分别为 Sunyang SunyangImpl ,绑定类为 Bind ,如代码 4 5 所示。
代码 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 所示的结果。
3   使用成员变量注入
 
 
 
吉林省三扬科技咨询有限公司-长春JAVA培训|Java培训|PHP培训|3G培训|长春三扬java培训|长春培训|C++培训|嵌入式培训|ORACLE培训|软件测试培训|.Net培训|游戏培训|嵌入式LINUX培训|数据库培训|大学生IT培训||软件培训|IT培训|IT就业培训|软件工程师培训|程序员培训|电脑培训|IT认证培训|大学生就业培训|职业技能培训|IT业余班|周末班培训

你可能感兴趣的:(职场,Guice,休闲)