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业余班|周末班培训