Guice的github地址: https://github.com/google/guice/wiki/Motivation 这个例子很简单,如果会点Guice,那么不需要再往下看了 1.添加依赖 List-1 pom.xml中添加如下依赖 <dependency> <groupId>com.google.inject</groupId> <artifactId>guice List-5 public class Main { public static void main(String[] args) { Injector injector = Guice.createInjector
,然后从Injector拿到你想要的对象就可以了,Guice会自动装配依赖树。 Guice的启动速度是很快的,在一个大型应用中,Guice装配所有的模块决不会超过1s。Guice是一个非常干净的依赖注入框架,框架除了依赖注入功能之外,没有任何其它非相关模块功能。 Guice里最常用的两个注解就是@Singleton和@Inject,Singleton表示构建的对象是单例的,Inject表示被标注的字段将使用Guice自动注入。 Guice需要实例化对象,请确保相应被实例化的对象有默认构造器。 我们可以使用Guice Module定义装配规则,它相当于Spring的XML文件,只不过它的装配规则都是使用代码定义的。
这时候我们可以考虑使用Guice。本文参考了Guice官方文档,详细信息可以直接查看Guice文档。 基本使用 引入依赖 如果使用Maven的话,添加下面的依赖项。 Guice配置完之后,我们需要调用Guice.createInjector方法传入配置类来创建一个注入器,然后使用注入器的getInstance方法获取目标类,Guice会按照配置帮我们注入所有依赖。 安装Guice Servlet扩展 要在Servlet项目中集成Guice,首先需要安装Guice Servlet扩展。如果使用Maven,添加下面的依赖。 下面这个表格来自于Guice文档,我们可以看到JSR-330和Guice注解基本上可以互换。 以上就是Guice的基本知识了。如果需要更详细的使用方法,请参考Guice文档。如果有兴趣还可以看看我的CSDN代码,包含了我的Guice练习代码。
Guice 在上一篇博客中, 我们讲解了Spring中的IOC示例与实现, 本文着重介绍Guice注入以及与Spring中的差异. Guice 3.0支持 jdk 1.6, 如果运行报错ClassNotFoundException: javax.inject.Provider, 则需要导入javax.inject包. Module容器 Guice中容器即Module, 用于绑定接口 : 实现类, 类似于Spring中的applicationContext.xml. 这是因为如果对象不属于Guice托管, 那么他也无法得到Guice注入. 如果一定要new GuiceObjectDemo()呢? 动态参数注入 这个稍微麻烦一点, 需要引入guice-assistedinject, 利用FactoryModuleBuilder构造一个factory实行注入.
Guice是Google开源的一个依赖注入类库,相比于Spring IoC来说更小更快。Elasticsearch大量使用了Guice,本文简单的介绍下Guice的基本概念和使用方式 基本使用 1. 我们就可以开始使用Guice了 项目骨架 我们来假设一个简单的项目框架。 方法获取目标类,Guice会按照配置帮我们注入所有依赖。 Servlet扩展 要在Servlet项目中集成Guice,首先需要安装Guice Servlet扩展。 下面这个表格来自于Guice文档,我们可以看到JSR-330和Guice注解基本上可以互换。 ? JSR-330 Guice官方推荐我们首选JSR-330标准的注解。 以上就是Guice的基本知识了。
前言 Elasticsearch 源代码中使用了Guice框架进行依赖注入. 为了方便阅读源码, 此处我先通过模仿ES guice的使用方式简单写了一个基本Demo 方便理解, 之后再来理一下ES的Guice使用. 编写的测试类原理图如下: ? ES Guice Demo 总共有两个Module,一个是ToolModule,用于绑定IAnimal接口、ITool接口以及Map对象. 另一个是HumanModule 用于绑定Person对象。 的使用 ES中TransportClient初始化时的Guice的使用是这样的, 如下图所示 ? 处下载 参考: kason_zhang Elasticsearch Guice 的使用 ---- 更多内容请访问我的个人博客:http://laijianfeng.org/
文中提到高效实现依赖注入的工具Guice,本文就介绍一下这款Google开源的依赖注入框架Guice及其使用方法。 1. 那么何时使用在代码中使用 Guice 进行注入呢?一般来说,如果在你的应用代码中业务对象 (Business Objects) 之间的关系或者依赖需要维护的话,你就可以使用Guice 进行注入。 Guice bind Binding is to Guice as wiring is to Spring。 隐式注入 Guice 还提供隐式注入一些通用组件,例如Injector和java.util.Logger的实例等。 Guice Scope机制 Guice支持我们在其他DI框架中逐渐习惯的Scope和Scope机制。
Guice 是一个依赖注入的小清新工具。相比 Spring 的依赖管理来说,这个工具更加小巧,我们可以在测试中直接使用。 Junit 5在 Junit 中使用就没有那么方便了,因为 Junit 没有 Guice 的注解。你需要手动写一个类,在这个类中,对 Injector 的模块进行配置。 package com.ossez.wechat.oa.api.test;import com.google.inject.AbstractModule;import com.google.inject.Guice java.io.IOException;import java.io.InputStream;import java.util.concurrent.locks.ReentrantLock;/** * Init Guice https://www.ossez.com/t/junit-5-guice-di/14395
Guice是Google开发的一个轻量级,基于Java5(主要运用泛型与注释特性)的依赖注入框架(IOC)。Guice非常小而且快。 Guice是类型安全的,它能够对构造函数,属性,方法(包含任意个参数的任意方法,而不仅仅是setter方法)进行注入。 定义一个 Guice Module这个 Guice Model 会实现 Module 接口。然后对需要注入的类进行绑定。 相对 Junit 测试框架来说,TestNG 使用 Guice 更加方便。如何在 Junit 中使用 Guice ,请参考文章:Junit 5 如何使用 Guice DI 中的内容。 https://www.ossez.com/t/testng-guice/14396
Google Guice容器内部有什么 前言 Maven系列,好几天没写了,主要是这几天被Google Guice卡住了,本来是可以随便带过Guice,讲讲guice的用法就够了(这个已经讲了,在前面的文章 ),但是,想着guice作为maven的底层IOC容器,对guice的理解深入一些,对后续的Maven源码学习也会比较有帮助,因此,就在那开始分析guice的源码。 guice作为一个仅次于Spring的IOC容器,代码也不是那么好懂的,毕竟也迭代了十来年了;代码量不少,另外,我感觉代码也有点绕,就看得真心有点打瞌睡。 针对Guice的源码分析法 一般来说,我debug源码,都是从头开始,单步debug过去,很多时候,这种IOC框架啥的,启动非常复杂,一个小时也跟不完一趟;过程冗长,一篇几千字的文章基本都讲不完,读者也记不住那么多东西 key就是对应的接口类,value就是说:怎么去实例化一个这个类型的实例出来,所以呢,guice内部,为了统一,基本把value这部分统一成了一个工厂。如下: 而工厂类里是什么样呢?
change the default behavior from "prototype" to "singleton", and I saw that spring 2.5 was faster than Guice Here are some benchmarks (there is variability based on the runs) * Spring 2.0 vs. guice 1.0: Concurrent: Spring is 5-10X slower * Spring 2.0.6 vs. guice 1.0: o Prototype: Single Concurrent: Spring:Guice ~2:3 * Spring 2.14m vs. guice 1.0: o Prototype: Single thread Concurrent: Spring is 1-1.5X faster * guice 1.0: o Prototype: Single thread vs.
Dagger 依赖注入的诉求, 这边就不重复描述了, 在上文Spring以及Guice的IOC文档中都有提及, 既然有了Guice, Google为啥还要搞个Dagger2出来重复造轮子呢? 而Dagger跟Guice最大的差异在于, 他是编译期注入的, 而不是运行时. 他生成的代码可以直观的调试, 也不是通过反射, 而是通过构建工厂类. 下面我们用代码来简单演示一下. 写法很简单, 跟Guice类似, 我们只需要在reportpage成员上加@Inject注解. 此时我们就要跟Guice里一样, 使用@Named注解来标识了 1 @Named("new") 2 public ReportPageProvider reportPage; 调用的时候也很简单 // 对象会在get()方法调用的时候触发初始化 4 job.oldReportPage.get().print(); 到这边就结束了, 可以看到Dagger使用上跟Guice
Container退任后,取而代之的底层容器是Guice。 这里说,把组件解析后,存放到了Guice容器中,这个也不是特别准确,更准确的说法是,放到了基于Guice进行了一层封装的一个容器中,这个容器叫做:sisu,由eclipse在维护这个开源项目(https Guice是什么 根据wiki的描述,Guice就是依赖注入框架,由google开源。主要特点就是:支持以java注解的方式配置组件及依赖。 Guice中,存东西的多种方式 概览 存东西,在Guice的文档里,名词叫做Binding,中文就是绑定吧。 基于这两个问题呢,方法肯定是有的,所以,Maven也足够聪明,没有直接基于Guice,而是选择了基于Guice封装后的Sisu,而Sisu就可以解决我们说的问题,支持类路径扫描之类的。
但本文并不聊它,而是介绍一款谷歌开源的轻量级依赖注入框架:Guice。 ---- 正文 正所谓谷歌出品,必属精品,况且Guice还出自于它的广告这种多金部门,自然也不例外。Google Guice被大量应用于谷歌内部,然后2010年开源出来。 ---- Google Guice Google Guice作为一个纯粹的DI框架,主要用于减轻你对工厂的需求以及Java代码中对new的使用。 @6fb0d3ed com.yourbatman.eurekaclient.guice.Dog@24b1d79b com.yourbatman.eurekaclient.guice.Dog@68ceda24 ;Guice只记录绑定关系,然后在运行时有需要的时候帮你完成注入 ---- 优缺点 Spring 的优缺点此处不做说明,主要描述Guice它的DI领域的优缺点。
总结 关注A哥 前言 回想一下,在本系列第一篇文章就有提到过,Eureka它是使用轻量级DI框架:谷歌的Guice来管理其依赖的。 Eureka选择了谷歌的轻量级DI框架Guice来化解该难题。本文将尝试使用Guice来自动化管理其各个组件,一键启动 Eureka Client端,让其协调工作起来。 说明:在理解了本文之后再去阅读Spring Cloud整合Eureka,那就“易如反掌”了 提示:在阅读本文之前,请务必确保你已经了解Guice是什么,大概怎么玩。 ---- Spring Cloud整合Guice了吗? 答案:完全没有。虽然说Spring和Guice均为DI框架,但是其实他俩是可以完成整合、和谐相处的。 但实际上是,在Spring Cloud中使用Eureka时,它完全没有使用到Guice,而是把所有Eureka的组件均交由Spring容器管理,完全的自己组织。
来源:GinoBeFunny zhuanlan.zhihu.com/p/24924391 Guice是Google开源的一个依赖注入类库,相比于Spring IoC来说更小更快。 Elasticsearch大量使用了Guice,本文简单的介绍下Guice的基本概念和使用方式。 学习目标 概述:了解Guice是什么,有什么特点; 快速开始:通过实例了解Guice; 核心概念:了解Guice涉及的核心概念,如绑定(Binding)、范围(Scope)和注入(Injection); 最佳实践:官方推荐的最佳实践; Guice概述 Guice是Google开源的依赖注入类库,通过Guice减少了对工厂方法和new的使用,使得代码更易交付、测试和重用; Guice可以帮助我们更好地设计 API,它是个轻量级非侵入式的类库; Guice对开发友好,当有异常发生时能提供更多有用的信息用于分析; 快速开始 假设一个在线预订Pizza的网站,其有一个计费服务接口: public interface
Guice是Google开源的一个依赖注入类库,相比于Spring IoC来说更小更快。Elasticsearch大量使用了Guice,本文简单的介绍下Guice的基本概念和使用方式。 学习目标 概述:了解Guice是什么,有什么特点; 快速开始:通过实例了解Guice; 核心概念:了解Guice涉及的核心概念,如绑定(Binding)、范围(Scope)和注入(Injection); 最佳实践:官方推荐的最佳实践; Guice概述 Guice是Google开源的依赖注入类库,通过Guice减少了对工厂方法和new的使用,使得代码更易交付、测试和重用; Guice可以帮助我们更好地设计 API,它是个轻量级非侵入式的类库; Guice对开发友好,当有异常发生时能提供更多有用的信息用于分析; 快速开始 假设一个在线预订Pizza的网站,其有一个计费服务接口: public interface 首先我们需要告诉Guice如果找到接口对应的实现类,这个可以通过模块 来实现: public class BillingModule extends AbstractModule { @Override
对这个历史感兴趣的,可以直接看: https://blog.sonatype.com/2010/01/from-plexus-to-guice-1-why-guice/ 为什么呢? 因此,google 在2007年的时候,就推出了一个轻量级的依赖注入框架,叫google guice。 ,以后就只管用了,而guice的维护升级,自然有Guice的开源团队去跟进。 接下来,是Guice的时代,而现在,十多年后的2021年,Guice依然稳定地支撑着Maven。 Guice足够优秀,在此之前,我竟然几乎没什么了解,Guice在哪些地方有应用呢,简单列举几个: google内部 scalatest TestNG Caffeine Cache Spring Security
标签库描述 ) Spring Config ( Spring配置文件 ) Diagram ( 图表建模 ) Java Class Diagram Module Dependencies Google Guice ( 谷歌开源的一款依赖注入框架 ) Guice Module Guice Provider Guice Binding Annotation Guice Scope Annotation Guice
-依赖注入 TestNG支持两种不同类型的依赖项注入:本机(由TestNG本身执行)和外部(由诸如Guice的依赖项注入框架执行)。 1.1-本机依赖项注入 TestNG允许您在方法中声明其他参数。 依赖注入 如果您使用Guice,TestNG为您提供了一种简单的方法,即可通过Guice模块注入测试对象: /** * @author 北京-宏哥 * * Java自动化测试框架-09 - TestNG 您的createModule方法应返回一个Guice模块,它将知道如何实例化此测试类。您可以使用测试上下文来查找有关您的环境的更多信息,例如在testng.xml中指定的参数等。 通过父模块和guice-stage套件参数,您将获得更大的灵活性和Guice功能。 guice-stage可让您选择用于创建父注射器的Stage。默认值是DEVELOPMENT。 还将使用该模块获取特定于测试的Guice模块和模块工厂的实例,然后将为每个测试类创建子注入器。通过这种方法,您可以在父模块中声明所有公共绑定,也可以在模块和模块工厂中注入在父模块中声明的绑定。