Google Guice 3.0开发
来源:互联网 发布:服务器安装linux系统 编辑:程序博客网 时间:2024/06/01 11:23
Google Guice 3.0开发
作者:chszs,未经博主允许不得转载。经许可的转载需注明作者和博客主页:http://blog.csdn.net/chszs
Google Guice框架是一个基于Java 6以上的轻量级依赖注入框架,由Google开发。你可能会问,如果我们已经有Spring用于依赖注入,那么为什么我们需要Guice?好吧,如果你只需在应用程序中实现依赖注入,那么你无需使用Spring容器。Spring不仅仅是一个依赖注入框架,二期大多数Spring应用都使用了XML作为依赖注入的方式。而Guice却是一个相对更轻量级的框架,它的集成更少,有Java实例配置和运行时绑定。通过使用Java绑定,可以获得编译时的类型检查和IDE自动完成功能。
Guice框架的运行速度也很快。默认情况下,Guice为每一个依赖(对应Spring的“prototype”范围)注入一个新的、单独的对象实例,而Spring则默认提供单态实例。Guice框架将依赖注入提升到一个新的水平,充分利用Java类型的所有功能,特别是注释和泛型,使得构建的DI应用程序更加模块化,更容易编写,并且错误更少、易于维护。
一、下载Google Guice
Google Guice的Maven依赖如下:
<dependency> <groupId>com.google.inject</groupId> <artifactId>guice</artifactId> <version>3.0</version></dependency>
也可以从Github下载,见:https://github.com/google/guice
要运行基于Guice的应用程序,有三个依赖包是必须的:
- guice-3.0.jar
- javax.inject.jar
- aopalliance.jar
二、实战示例
下面创建一个简单的Java程序,使用Guice实现依赖注入。
1、服务接口类ArithmeticService.java
public interface ArithmeticService { void calculate(int a, int b);}
2、服务接口实现类AdditionService.java
public class AdditionService implements ArithmeticService { @Override public void calculate(int a, int b) { System.out.println("Addition of " + a + " and " + b + " is: " + (a + b)); }}
3、另一个服务接口实现类SubtractionService.java
public class SubtractionService implements ArithmeticService { @Override public void calculate(int a, int b) { System.out.println("Subtraction of " + a + " and " + b + " is: " + (a - b)); }}
4、第三个服务接口实现类MultiplicationService.java
public class MultiplicationService implements ArithmeticService { @Override public void calculate(int a, int b) { System.out.println("Multiplication of " + a + " and " + b + " is: " + (a * b)); }}
5、第四个服务接口实现类DivisionService.java
public class DivisionService implements ArithmeticService { @Override public void calculate(int a, int b) { System.out.println("Divisiton of " + a + " and " + b + " is: " + (a / b)); }}
6、Consumer Class
import javax.inject.Inject; public class MyApplication { private ArithmeticService service; // constructor based injection // @Inject // public MyApplication(ArithmeticService service){ // this.service=service; // } // setter method injection @Inject public void setService(ArithmeticService service) { this.service = service; } public void calculate(int a, int b) { service.calculate(a, b); }}
Guice框架既支持基于构造方法的注入方式,也支持基于setter的注入方式。在上面的例子中,使用了基于setter的注入方式,并注释了基于构造方法的注入方式。
7、绑定服务实现
Google Guice框架需要知道要使用哪一个服务的实现类,因此必须配置它——通过继承AbstractModule类,并为configure()方法提供一个实现对象。如下:
import com.google.inject.AbstractModule;public class GuiceInjector extends AbstractModule { @Override protected void configure() { bind(ArithmeticService.class).to(AdditionService.class); // bind(ArithmeticService.class).to(MultiplicationService.class); // bind(ArithmeticService.class).to(DivisionService.class); // bind(ArithmeticService.class).to(SubtractionService.class); }}
注意在上面的配置中,我已经将服务绑定到AdditionService实现类上。我们可以将绑定任一实现类到服务接口。如果将来要使用不同的服务实现,如SubtractionService或MultiplicationService,只需更改上述文件中的绑定。而无需修改客户端应用程序。
8、客户端应用程序
下面写一个客户端示例程序。
import com.google.inject.Guice;import com.google.inject.Injector;public class ClientApplication { public static void main(String[] args) { Injector injector = Guice.createInjector(new GuiceInjector()); MyApplication app = injector.getInstance(MyApplication.class); app.calculate(1, 2); }}
这里我们使用Guice类的createInjector()方法创建了一个Injector对象,并传递了我们自定义的注入器实现类的对象。然后使用注入器对象的getInstance()方法来创建一个服务消费类(MyApplication)的实例。在创建MyApplication对象时,Guice框架会自动注入其依赖的服务类实现(这里为AdditionService)。下面是运行代码的输出:
Addition of 1 and 2 is: 3
还可以使用Google Guice来创建一个没有配置注入器的服务类(也即绑定服务类实现),如下:
import com.google.inject.Guice;import com.google.inject.Injector;public class ClientApplication { public static void main(String[] args) { Injector injector = Guice.createInjector(); AdditionService addService = injector.getInstance(AdditionService.class); SubtractionService subService = injector.getInstance(SubtractionService.class); MultiplicationService mulService = injector.getInstance(MultiplicationService.class); DivisionService divService = injector.getInstance(DivisionService.class); addService.calculate(1, 2); subService.calculate(10, 5); mulService.calculate(5, 2); divService.calculate(4, 2); }}
如上面的例子所示,没有使用像GuiceInjector这样的自定义注入器类。运行上面的代码,将产生以下输出:
Addition of 1 and 2 is: 3Subtraction of 10 and 5 is: 5Multiplication of 5 and 2 is: 10Divisiton of 4 and 2 is: 2
这就是Java语言的Google Guice框架。
- Google Guice 3.0开发
- Google Guice
- Google guice
- Google Guice
- Google Guice入门教程1
- Google Guice入门教程2
- Google Guice入门教程3
- Google Guice入门教程4
- Google Guice入门教程5
- Google-Guice入门介绍
- Google - Guice 入门介绍
- Google Guice 简介
- Google Guice简介
- Google-Guice入门介绍
- Google Guice使用入门
- Google Guice 绑定2
- Google Guice Provider绑定
- Google Guice之Servlet
- 【书山有路】Python基础教程 第4章
- 500. Keyboard Row\205. Isomorphic Strings\453. Minimum Moves to Equal Array Elements
- 高性能javascript(一)加载与执行
- kafka学习bolg
- lua基础(sh向lua传递参数arg)
- Google Guice 3.0开发
- Android数据存储方式——文件存储(内部和外部空间)
- 在eclipse中打开文件所在的目录
- 【DOM】node类型
- git仓库地址更换域名地址,即更换git托管
- strcat函数疑点验证
- Html调用摄像头并拍照
- 使用Maven管理Java项目
- MyBatis学习总结(四):MyBatis主配置文件