`

Google Guice学习一(基础)

 
阅读更多

Google Guice是依赖注解的DI容器,支持字段、方法和构造函数的注入依赖。

使用方法步骤为配置需要注入的字段、配置模板、使用Injector API获得实例。

 

 一、 支持的注入方式

1、字段注入

最常见的方式,使用@Inject注解完成

@Inject

private XmlUserLoader loader;

 

2、构造函数注入

@Inject

public XmlUserServiceImpl(XmlUserLoader loader)

{

this.loader=loader;

}

  3、setter方法注入

 

@Inject

public void setLoader(XmlUserLoader loader)

{

this.loader = loader;

}

 

  二、 注入的API(配置模板)

Guice通过配置Module的方式来绑定关系。

 

public class ClientModule implements Module
{

	public void configure(Binder binder)
	{
		binder.bind(UserService.class).to(XmlUserServiceImpl.class);
	}

}
 
Binder中提供了很多绑定的API,这些API其实可以理解为配置文件。支持很多种类型的绑定

 

1、绑定一个具体的子类:
binder.bind(UserService.class).to(XmlUserServiceImpl.class);

2、绑定一个实例:

binder.bind(UserService.class).toInstance(new XmlUserServiceImpl());

3、支持注解形式的绑定:

binder.bind(String.class).annotatedWith(Names.named("xmlUrl")).toInstance("/user.xml");

这样如果存在如下代码:

        @Inject

@Named("xmlUrl")

private String xmlUrl;

那么这个字符串将会设置为"/user.xml"

当然也可以设置自定义的注解。但是个人认为Names这个注解已经基本满足要求了。

可以看一下com.google.inject.name.Names.named(String)方法,其实返回的是个注解,类继承了注解。

class NamedImpl implements com.google.inject.name.Named, Serializable {

  private final String value;
           //com.google.inject.name.Named是个注解类型
  public NamedImpl(String value) {
    this.value = checkNotNull(value, "name");
  }

 

自定义注解的示例:

 

@Retention(RUNTIME)
@Target({ ElementType.FIELD, ElementType.PARAMETER, ElementType.METHOD })
@BindingAnnotation      //这个必须要加上才行,否则报错
public @interface English
{

}

 那么在Module中的使用如下:

public class Client
{
	@Inject
	@English
	private MyService service;

	public void greeting()
	{
		System.out.println(service.greeting());
	}

	public static void main(String[] args)
	{
		Module module = new Module()
		{
			public void configure(Binder binder)
			{
				binder.bind(MyService.class).annotatedWith(English.class).to(EnglishService.class);
			}
		};
		Injector i = Guice.createInjector(module);
		Client client = i.getInstance(Client.class);
		client.greeting();
	}
}

 4、provider形式的绑定

provider提供了更灵活的形式可以自定义创建对象的逻辑。框架提供了两种provider的形式。

A、实现provider接口,并绑定

修改上面示例如下:

final Provider<MyService> provider = new Provider<MyService>()
		{

			public MyService get()
			{
				// 用户的自定义创建逻辑
				return new EnglishService();
			}
		};

		Module module = new Module()
		{
			public void configure(Binder binder)
			{
				binder.bind(MyService.class).annotatedWith(English.class).toProvider(provider);
			}
		};

 

B、通过@Provides在Module中定义方法

 

	@Provides
        @Name("test")
	public MyService getMyService()
	{
		// 用户的自定义创建逻辑
		return new EnglishService();
	}

 5、静态类注入

对静态字段类注入:

	public void configure(Binder binder)
	{
		binder.bindConstant().annotatedWith(Names.named(("DataTimeUtils"))).to("yyyy-MM-dd");
		binder.requestStaticInjection(DataTimeUtils.class);
	}


@Inject
	@Named("DataTimeUtils")
	private static String dataFormat;

 6、不明确的注入:

通过ImplementedBy注解指定需要使用的类

@ImplementedBy(EnglishService.class)

public interface MyService

{

String greeting();

}

 

三、 使用Injector API获取实例

	Injector i = Guice.createInjector(new MyModule());
		Client client = i.getInstance(Client.class);   //直接获取实例
		client.greeting();

 

Client client = new Client();
		Injector i = Guice.createInjector(new MyModule());
		i.injectMembers(client);   //调用该API,填充字段
		client.greeting();

 

分享到:
评论

相关推荐

    Google Guice: Agile Lightweight Dependency Injection Framework

    本书《Google Guice: Agile Lightweight Dependency Injection Framework》旨在深入探讨Guice的核心概念和技术细节,并通过丰富的示例和背景信息帮助读者全面掌握这一强大的工具。 #### 二、Guice概述 Guice是由...

    Guice 中文文档 例子

    Guice 是 Google 推出的一款轻量级的依赖注入框架,专为 Java 5 及其后续版本设计。依赖注入(Dependency Injection,简称 DI)是一种设计模式,它允许开发者在不直接创建对象的情况下,将依赖关系从代码中解耦出来...

    Google.Guice.Agile.Lightweight.Dependency.Injection.Framework

    《Google Guice:敏捷轻量级依赖注入框架》是一本深度探索Google Guice框架的专著,由Robbie Vanbrabant撰写,旨在帮助读者全面掌握这一先进的依赖注入技术。本书共180页,提供了PDF电子书和按需打印两种版本,是...

    ext extjs4学习经典实例 guice mybaits 简单权限 (全量包)

    Guice 是 Google 开发的一款轻量级依赖注入(Dependency Injection,DI)框架,它是针对Java平台的。Guice的目标是简化对象的创建和配置,通过自动管理和装配对象之间的依赖关系,让开发者能更专注于业务逻辑而非...

    ExtJs 4.*、Guice3、MyBatis3、MySql架构的 弱权限管理框架 更新 一

    本项目是一个基于ExtJs 4.*, Guice3, MyBatis3和MySql的弱权限管理框架,它提供了基础的用户权限控制功能,适合学习和借鉴。下面将详细介绍这些技术及其在框架中的应用。 **ExtJs 4.x** ExtJs是一款强大的...

    dropwizard-guice-0.6.2.zip

    Dropwizard是一个用于构建高性能、生产级Java web服务的工具集,而Guice是Google开发的一个轻量级依赖注入框架。这个压缩包可能是为了解决在Dropwizard应用中集成Guice,以实现更灵活的组件管理和配置。 Dropwizard...

    wink-guice-server-1.2.1-incubating.zip

    2. **Guice服务器**:`wink-guice-server`可能是构建在Guice基础上的一个服务器实现,它可能提供了HTTP服务、RESTful API支持等,利用Guice进行依赖管理。 3. **CSV处理**:`slicer`模块专门处理CSV文件,提供了...

    DropWizard-Guice-Redis:带有 Guice 和 Redis 的简单 dropwizard 配置

    在 DropWizard-Guice-Redis 项目中,Guice 是Google提供的轻量级依赖注入框架。依赖注入(Dependency Injection,简称DI)是一种设计模式,它有助于减少代码之间的耦合,提高代码的可测试性和可维护性。Guice 通过...

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

    "api启动 球衣+guice+mybatis+gradle+liquibase 入门套件" 描述简单明了,表示这个项目是为API启动而设计的,整合了上述所有技术,提供了一个快速上手的基础环境,方便开发者学习和实践这些技术的集成使用。...

    argo-util-2.2.1.zip

    集成Guice则意味着Jackson的这些基础模块可以方便地与Google的依赖注入框架Guice一起使用。Guice是一个轻量级的IoC(Inversion of Control)容器,它可以自动管理对象的生命周期和依赖关系,使得代码更加简洁、可...

    DropWizard-Guice-Firebase:带有 Guice 和 Firebase 的简单 dropwizard 配置

    总之,DropWizard-Guice-Firebase 示例项目提供了一个实用的起点,展示了如何将 Java 服务与现代化的前端技术相结合,利用 DropWizard 提供稳定的基础架构,Guice 管理依赖,以及 Firebase 提供实时数据存储。...

    edal-core-0.7.zip

    【描述】提及的 "guice-persist-neo4j.zip" 是另一个开源项目,它是Google Guice框架与Neo4j图形数据库整合的一个扩展。Guice Persist是Guice框架的一部分,用于提供依赖注入(DI)支持到持久化层,而这个项目则是将...

    Training-manager:Angularjs(JS 框架) + Guice(DI 框架) + Jersy(Rest 框架) + Hibernate(JPA)

    2. Guice:Guice是Google开发的一款轻量级依赖注入(DI)框架,它是针对Java设计的。DI是一种设计模式,允许对象之间通过依赖关系进行解耦,提高了代码的灵活性和可测试性。Guice通过注解和配置,使得对象的创建和...

    《Dependency Injection》电子书

    **Google Guice**是由Google开发的一款轻量级的依赖注入框架。它简化了依赖注入的过程,并且易于理解和使用。Guice支持以下特性: - **自动依赖注入**:无需显式地配置依赖项。 - **自定义扩展**:通过扩展点允许...

    GWT in action(英文版)

    **GWT(Google Web Toolkit)**是Google推出的一款开源的Web开发框架,它允许开发者使用Java语言来编写前端代码,并自动生成高效的JavaScript。这使得开发者能够利用强大的Java生态系统,同时享受Web开发的便利性。 ...

    xtext基础入门说明资料

    为了更好地管理依赖关系,Xtext采用了Google Guice库。开发者可以通过定义模块来指定依赖注入的行为。 **4.2.2 获取注入器** 通过获取注入器,开发者可以访问到Xtext中的各种服务和组件。 #### 5. 运行时概念 **...

    应用源码之roboguice-master.zip

    RoboGuice是一款轻量级的依赖注入框架,专为Android应用程序设计,它基于Google的Guice库进行了优化。在Android开发中,依赖注入(Dependency Injection)是一种重要的设计模式,可以帮助开发者减少代码间的耦合性,...

    GWT完整教程,Word版

    【GWT完整教程,Word版】是一份详尽的在线应用程序开发指南,专注于Google Web Toolkit(GWT)的教育和实践。本教程分为三个主要部分:入门、进阶和高级,旨在为不同水平的开发者提供逐步指导,帮助他们掌握GWT的精髓...

    山寨的一个MVC框架

    开发者可以使用自定义的DI容器,或者借鉴现有库如Google的Guice或Spring的Autowired。 7. **测试支持**:一个良好的MVC框架应提供方便的测试工具和API,使得单元测试和集成测试变得简单。 8. **安全性**:考虑到...

Global site tag (gtag.js) - Google Analytics