Google Guice 3.0开发

简介: 版权声明:本文为博主chszs的原创文章,未经博主允许不得转载。 https://blog.csdn.net/chszs/article/details/58049192 Google Guice 3.0开发作者:chszs,未经博主允许不得转载。
版权声明:本文为博主chszs的原创文章,未经博主允许不得转载。 https://blog.csdn.net/chszs/article/details/58049192

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: 3
Subtraction of 10 and 5 is: 5
Multiplication of 5 and 2 is: 10
Divisiton of 4 and 2 is: 2

这就是Java语言的Google Guice框架。

目录
相关文章
|
传感器 安全 Android开发
Google发布 Android 12 开发预览版
Google发布 Android 12 开发预览版
116 1
|
6月前
|
机器学习/深度学习 人工智能 TensorFlow
TensorFlow 是一个由 Google 开发的开源深度学习框架
TensorFlow 是一个由 Google 开发的开源深度学习框架
88 3
|
5月前
|
存储 数据库 Android开发
🔥Android Jetpack全解析!拥抱Google官方库,让你的开发之旅更加顺畅无阻!🚀
【7月更文挑战第28天】在Android开发中追求高效稳定的路径?Android Jetpack作为Google官方库集合,是你的理想选择。它包含多个独立又协同工作的库,覆盖UI到安全性等多个领域,旨在减少样板代码,提高开发效率与应用质量。Jetpack核心组件如LiveData、ViewModel、Room等简化了数据绑定、状态保存及数据库操作。引入Jetpack只需在`build.gradle`中添加依赖。例如,使用Room进行数据库操作变得异常简单,从定义实体到实现CRUD操作,一切尽在掌握之中。拥抱Jetpack,提升开发效率,构建高质量应用!
84 4
|
5月前
|
人工智能 自然语言处理 数据挖掘
详解:Google AI Gemini中文版本(基于API 开发实现对话)
谷歌旗下的人工智能应用Gemini,自问世以来凭借其强大的计算能力和高效的处理性能,迅速成为全球用户的宠儿。作为一款由世界顶尖科技公司开发的产品,Gemini不仅在语言处理、图像识别、数据分析等领域表现出色,还在多种复杂任务中展现了其卓越的智能决策能力。然而,由于网络限制等问题,国内用户往往无法直接访问和使用Gemini的网站,这也导致了许多技术爱好者和专业人士未能亲身体验这一先进技术所带来的便利和强大功能。
|
7月前
|
JavaScript 测试技术
【sgGoogleTranslate】自定义组件:基于Vue.js用谷歌Google Translate翻译插件实现网站多国语言开发
【sgGoogleTranslate】自定义组件:基于Vue.js用谷歌Google Translate翻译插件实现网站多国语言开发
|
7月前
|
JSON Android开发 数据格式
Android框架-Google官方Gson解析,android开发实验报告总结
Android框架-Google官方Gson解析,android开发实验报告总结
|
Java API Maven
Guava:google公司开发的一款Java类库扩展工具包
Guava:google公司开发的一款Java类库扩展工具包
388 0
|
语音技术 Android开发 信息无障碍
Google 谈与残疾人社区合作开发产品的重要性
每年五月的第三个星期四,是全球无障碍宣传日(GAAD),今年已来到第 11 个。5 月 19 日,Google 无障碍团队高级总监 Eve Andersson 发表博文分享了与残疾人社区合作开发产品的重要性。
159 0
Google 谈与残疾人社区合作开发产品的重要性
|
编解码 数据挖掘 定位技术
Google Earth Engine——Murray全球潮间带变化数据集在潮滩分类,用于开发陆地卫星协变量层的陆地卫星图像的数量
Google Earth Engine——Murray全球潮间带变化数据集在潮滩分类,用于开发陆地卫星协变量层的陆地卫星图像的数量
364 0
Google Earth Engine——Murray全球潮间带变化数据集在潮滩分类,用于开发陆地卫星协变量层的陆地卫星图像的数量
Google Earth Engine——PRISM日数据集和月数据集是美国本土的网格化气候数据集,由俄勒冈州立大学的PRISM气候小组制作。网格是使用PRISM(独立坡度模型的参数-海拔回归)开发的
Google Earth Engine——PRISM日数据集和月数据集是美国本土的网格化气候数据集,由俄勒冈州立大学的PRISM气候小组制作。网格是使用PRISM(独立坡度模型的参数-海拔回归)开发的
191 0
Google Earth Engine——PRISM日数据集和月数据集是美国本土的网格化气候数据集,由俄勒冈州立大学的PRISM气候小组制作。网格是使用PRISM(独立坡度模型的参数-海拔回归)开发的

相关实验场景

更多