`
lv12312
  • 浏览: 10723 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

Guice入门

 
阅读更多
最近项目用到了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));
  • 大小: 5.8 KB
0
0
分享到:
评论

相关推荐

    guice入门教程helloworld篇

    在"Guice入门教程HelloWorld篇"中,我们将学习如何使用Guice来构建简单的Java应用程序。首先,我们需要理解Guice的核心概念——模块(Module)和绑定(Binding)。模块是Guice配置的核心,它定义了哪些类应该被实例...

    guice入门学习资料

    guice 学习资料,快速掌握guice的编程技巧以及了解其机制。

    Guice教程(Google)

    #### 四、Guice入门 Guice通过使用`@Inject`注解来自动注入依赖项,这使得代码更简洁且易于理解。例如,如果有一个`UserService`类依赖于`UserRepository`,可以这样定义: ```java public class UserService { ...

    shiro,guice集成

    这段代码等价于快速入门示例中的前三行。 #### 总结 将 Apache Shiro 集成到基于 Guice 的应用中可以极大地提高安全性配置的灵活性和可维护性。通过使用官方提供的 Guice 模块,开发者可以轻松地配置和管理 Shiro ...

    Struts2的第一个入门实例(三)--Struts2与Guice整合

    在本实例中,我们将深入探讨如何将Google的依赖注入框架Guice与Struts2整合,以实现更高效、更灵活的代码管理。 在Java Web开发中,依赖注入(DI)是一种设计模式,它可以帮助我们降低组件之间的耦合,使得测试和...

    Hello-Google-Guice:第一个Google Guice项目

    **Hello-Google-Guice: Google Guice 入门教程** Google Guice 是一个轻量级的依赖注入框架,主要用于简化 Java 应用程序的构建和管理。它通过自动管理和提供对象之间的依赖关系,帮助开发者编写更加简洁、可测试...

    guice-jersey:Guice模块,用于使用Jersey启动基于Jetty的休息服务器

    泽西吉斯模块 介绍 Jersey带有自己的依赖注入框架,用于实例化其类。 如果您使用Guice作为依赖项注入框架,并且想将自己的类注入到您创建的JAX-RS类中...入门 将JerseyModule添加到您的Guice注射器 配置程序包以扫描

    jetty-mybatis-guice

    大多数项目最初都是基于教程等的小型入门项目。 所有子项目都包含 NOTES.txt 文件。 最有趣的一个是在 jetty-mybatis-guice。 mybatis-guice 中的那个涵盖了使用 mybatis-guice 逻辑创建的映射器与普通的 ...

    api-start:球衣+guice+mybatis+gradle+liquibase 入门套件

    "api-start:球衣+guice+mybatis+gradle+liquibase 入门套件" 这个标题表明这是一个用于初学者的API开发入门项目,其中包含了一系列技术栈的整合。"api-start"可能是指一个初始化的API服务项目,而"+"后面的各个技术...

    Ray.Di:适用于PHP的Guice样式依赖项注入框架

    它试图反映Guice的行为和风格。概述Ray.Di软件包为依赖项注入器提供了以下功能: 构造器注入和二传手注入自动注射构造后初始化原始PHP工厂代码编译器绑定注释/属性使用注入点元数据进行上下文注入面向方面的编程...

    khs-sherpa-guice:夏尔巴人的 Guice 注入集成

    入门 要使其正常工作,请按照下列步骤操作: 添加 &lt;listener&gt;com.khs.guice.SherpaGuiceContextListener&lt;/listener&gt; 在 Sherpa 的侦听器之后但在应用程序的侦听器之前到您的 web.xml。 在应用程序的上下文侦听...

    GWT入门和进阶

    ### GWT入门 **1. 安装与配置** 首先,你需要下载GWT SDK,并在Eclipse或其他IDE中配置GWT插件。安装SDK后,创建一个新的GWT项目,包括设置模块文件.gwt.xml,定义项目的源代码路径和库依赖。 **2. 编写客户端代码...

    Play framework 2.0入门教程(三)的源代码,Play留言板

    这个入门教程的第三部分是关于如何使用Play Framework构建一个简单的留言板应用。在这里,我们将深入探讨Play Framework的核心概念和关键组件,以及如何通过源代码实现这个留言板功能。 首先,Play Framework采用...

    annotated-timer:使用 Guice AOP 添加度量注释的行为

    入门 只需在 pom.xml 中添加依赖项 ... &lt;groupId&gt;io.delr3ves &lt;artifactId&gt;annotated-timer &lt;version&gt;1.0.0 ... 然后使用io.delr3ves.metrics.AnnotatedTimerGuiceModule创建注入器或将其安装在您的...

    MyBatis核心教程

    入门指南 ##### 2.1 安装 安装mybatis-guice非常简单,可以通过以下几种方式完成: - **Maven**: 将相应的依赖项添加到项目的`pom.xml`文件中。 - **Gradle**: 在`build.gradle`文件中添加依赖。 ##### 2.2 ...

    Shiro全面教程

    - `shiro-guice-1.2.0.jar` 提供了与 Google Guice 依赖注入框架的集成。 - `shiro-spring-1.2.0.jar` 用于与 Spring 框架的集成。 通过这个全面教程,你不仅可以掌握 Shiro 的基础,还能深入了解其在实际项目中...

    one-page-web-app-starter:使用 AngularJS、Bootstrap、Apache CXF、Hibernate 和 Guice 构建单页 Web 应用程序的“入门”项目

    一页网络应用启动器使用 AngularJS、Bootstrap、ApacheCXF 和 Hibernate 构建单页 Web 应用程序的“入门”项目。构建发布先决条件Ant 1.9.3 或 &gt; JDK 1.7 或 &gt; MySql 5.5 或 &gt; 应用程序源:克隆 repo 或下载源 .zip ...

Global site tag (gtag.js) - Google Analytics