最近项目用到了Guice作为轻量级的依赖注入框架,此次就把关于Guice方面的基础知识梳理了一下:
1、Guice简介
和Spring有点类似,Guice也是个依赖注入框架,主要使用注解形式来完成依赖注入的过程,而不是像Spring一样主要使用XML(虽然也可以用注解,但是XML的配置还是作为Spring不可或缺的一部分),Guice的特点就是足够轻量级,对于一些对于性能要求(包括启动速度,运行期等等)要求比较高的应用来讲的话,使用Guice是一个很好的选择,Guice依赖的Jar包很少,对于项目的管理来讲也稍微轻松一点。缺点也有:Guice功能还不足够强,作为企业级的框架在功能上还是稍弱一些,代码的侵入性比较强,依赖关系无法像XML那么直观的描述(这个当然是对于那些习惯了XML来作为描述文件的人来讲,可能你习惯注解的方式,这个因人而异吧)。
废话不多说,Guice搞起:
下载Jar包https://code.google.com/p/google-guice/,或者Maven依赖,将Guice所需的Jar包载入所使用的项目中去:
Maven依赖示例:
< dependency >
< groupId >com.jolira</ groupId >
< artifactId >guice</ artifactId >
< version >3.0.0</ version >
</ dependency >
|
先看看依赖的jar包结构:
这些jar包应该都不陌生,javax.inject-1.jar是满足Java依赖注入标准(JSR-330)所需的,cglib和asm都是AOP所需的Jar包,aopalliance是AOP Java接口包,OK,再加上guice的包,就这么简单。
上一个Helloworld程序,程序员惯例:
HelloWorld.java
import com.google.inject.Inject; import com.google.inject.name.Named; public class HelloWorld { @Inject @Named("hw") private String helloworld; public String getHelloworld() { return helloworld; } }
HelloWorldModule.java
import com.google.inject.AbstractModule; import com.google.inject.name.Names; public class HelloWorldModule extends AbstractModule{ @Override protected void configure() { bindConstant().annotatedWith(Names.named("hw")).to("Hello,world!"); } }
HelloWorldExample.java
import com.google.inject.Guice; import com.google.inject.Injector; public class HelloWorldExample { public static void main(String[] args) { Injector i = Guice.createInjector(new HelloWorldModule()); HelloWorld hw = i.getInstance(HelloWorld.class); System.out.println(hw.getHelloworld()); } }
2、Guice深入一点
像以上的例子中那样:
@Inject注解是告诉Guice这个地方需要注入对象进来。@Inject 可以给构造器、方法和属性注解。
Guice的注入风格:
位置 | 注入顺序 | 意图 | 注释 |
构造器 | 1 | 不变类的强制依赖 | 只允许一个构造器使用@Inject |
属性 | 2 | 快速原型代码(无需测试) | 多个属性注入顺序随机(依赖JVM) |
setter方法 | 3 | 处理遗留类可选的依赖关系 | 多个setter方法注入顺序随机 |
注意:@Inject注解还有一个optional属性,默认是false,如果是true的话,就是告诉Guice假如这个地方没有绑定的话,就忽略该值。
当注入存在继承关系的时候,首先是父类先注入,然后才轮到子类,@Inject不能作为接口成员的注解,不然,你的程序貌似不怎么好使了。Guice可以给私有,包私有,保护和公有的方法或者属性注入,只要其有@Inject注解。但是给私有成员注入不是一个很好的选择。
像上面的示例代码HelloWorldExample中那样,要想开始使用Guice,首先需要创建一个Injector实例,以一个或者多个Module实现作为参数,这里是用一个工厂方法 createInjector(...)。这里还有一个Stage.DEVELOPMENT参数和Stage.PRODUCTION参数,这里就不细说了,分别在开发环境和生产环境使用。默认是开发环境,但是对性能影响不太大。
通过key来获取实例:
在Guice中所有的绑定都是基于key的绑定:
上面的:
HelloWorld hw = i.getInstance(HelloWorld.class);
等同于:HelloWorld hw = i.getInstance(Key.get(HelloWorld.class));
相关推荐
在"Guice入门教程HelloWorld篇"中,我们将学习如何使用Guice来构建简单的Java应用程序。首先,我们需要理解Guice的核心概念——模块(Module)和绑定(Binding)。模块是Guice配置的核心,它定义了哪些类应该被实例...
guice 学习资料,快速掌握guice的编程技巧以及了解其机制。
#### 四、Guice入门 Guice通过使用`@Inject`注解来自动注入依赖项,这使得代码更简洁且易于理解。例如,如果有一个`UserService`类依赖于`UserRepository`,可以这样定义: ```java public class UserService { ...
这段代码等价于快速入门示例中的前三行。 #### 总结 将 Apache Shiro 集成到基于 Guice 的应用中可以极大地提高安全性配置的灵活性和可维护性。通过使用官方提供的 Guice 模块,开发者可以轻松地配置和管理 Shiro ...
在本实例中,我们将深入探讨如何将Google的依赖注入框架Guice与Struts2整合,以实现更高效、更灵活的代码管理。 在Java Web开发中,依赖注入(DI)是一种设计模式,它可以帮助我们降低组件之间的耦合,使得测试和...
**Hello-Google-Guice: Google Guice 入门教程** Google Guice 是一个轻量级的依赖注入框架,主要用于简化 Java 应用程序的构建和管理。它通过自动管理和提供对象之间的依赖关系,帮助开发者编写更加简洁、可测试...
泽西吉斯模块 介绍 Jersey带有自己的依赖注入框架,用于实例化其类。 如果您使用Guice作为依赖项注入框架,并且想将自己的类注入到您创建的JAX-RS类中...入门 将JerseyModule添加到您的Guice注射器 配置程序包以扫描
大多数项目最初都是基于教程等的小型入门项目。 所有子项目都包含 NOTES.txt 文件。 最有趣的一个是在 jetty-mybatis-guice。 mybatis-guice 中的那个涵盖了使用 mybatis-guice 逻辑创建的映射器与普通的 ...
"api-start:球衣+guice+mybatis+gradle+liquibase 入门套件" 这个标题表明这是一个用于初学者的API开发入门项目,其中包含了一系列技术栈的整合。"api-start"可能是指一个初始化的API服务项目,而"+"后面的各个技术...
它试图反映Guice的行为和风格。概述Ray.Di软件包为依赖项注入器提供了以下功能: 构造器注入和二传手注入自动注射构造后初始化原始PHP工厂代码编译器绑定注释/属性使用注入点元数据进行上下文注入面向方面的编程...
入门 要使其正常工作,请按照下列步骤操作: 添加 <listener>com.khs.guice.SherpaGuiceContextListener</listener> 在 Sherpa 的侦听器之后但在应用程序的侦听器之前到您的 web.xml。 在应用程序的上下文侦听...
### GWT入门 **1. 安装与配置** 首先,你需要下载GWT SDK,并在Eclipse或其他IDE中配置GWT插件。安装SDK后,创建一个新的GWT项目,包括设置模块文件.gwt.xml,定义项目的源代码路径和库依赖。 **2. 编写客户端代码...
这个入门教程的第三部分是关于如何使用Play Framework构建一个简单的留言板应用。在这里,我们将深入探讨Play Framework的核心概念和关键组件,以及如何通过源代码实现这个留言板功能。 首先,Play Framework采用...
入门 只需在 pom.xml 中添加依赖项 ... <groupId>io.delr3ves <artifactId>annotated-timer <version>1.0.0 ... 然后使用io.delr3ves.metrics.AnnotatedTimerGuiceModule创建注入器或将其安装在您的...
入门指南 ##### 2.1 安装 安装mybatis-guice非常简单,可以通过以下几种方式完成: - **Maven**: 将相应的依赖项添加到项目的`pom.xml`文件中。 - **Gradle**: 在`build.gradle`文件中添加依赖。 ##### 2.2 ...
- `shiro-guice-1.2.0.jar` 提供了与 Google Guice 依赖注入框架的集成。 - `shiro-spring-1.2.0.jar` 用于与 Spring 框架的集成。 通过这个全面教程,你不仅可以掌握 Shiro 的基础,还能深入了解其在实际项目中...
一页网络应用启动器使用 AngularJS、Bootstrap、ApacheCXF 和 Hibernate 构建单页 Web 应用程序的“入门”项目。构建发布先决条件Ant 1.9.3 或 > JDK 1.7 或 > MySql 5.5 或 > 应用程序源:克隆 repo 或下载源 .zip ...