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》旨在深入探讨Guice的核心概念和技术细节,并通过丰富的示例和背景信息帮助读者全面掌握这一强大的工具。 #### 二、Guice概述 Guice是由...
Guice 是 Google 推出的一款轻量级的依赖注入框架,专为 Java 5 及其后续版本设计。依赖注入(Dependency Injection,简称 DI)是一种设计模式,它允许开发者在不直接创建对象的情况下,将依赖关系从代码中解耦出来...
《Google Guice:敏捷轻量级依赖注入框架》是一本深度探索Google Guice框架的专著,由Robbie Vanbrabant撰写,旨在帮助读者全面掌握这一先进的依赖注入技术。本书共180页,提供了PDF电子书和按需打印两种版本,是...
Guice 是 Google 开发的一款轻量级依赖注入(Dependency Injection,DI)框架,它是针对Java平台的。Guice的目标是简化对象的创建和配置,通过自动管理和装配对象之间的依赖关系,让开发者能更专注于业务逻辑而非...
本项目是一个基于ExtJs 4.*, Guice3, MyBatis3和MySql的弱权限管理框架,它提供了基础的用户权限控制功能,适合学习和借鉴。下面将详细介绍这些技术及其在框架中的应用。 **ExtJs 4.x** ExtJs是一款强大的...
Dropwizard是一个用于构建高性能、生产级Java web服务的工具集,而Guice是Google开发的一个轻量级依赖注入框架。这个压缩包可能是为了解决在Dropwizard应用中集成Guice,以实现更灵活的组件管理和配置。 Dropwizard...
2. **Guice服务器**:`wink-guice-server`可能是构建在Guice基础上的一个服务器实现,它可能提供了HTTP服务、RESTful API支持等,利用Guice进行依赖管理。 3. **CSV处理**:`slicer`模块专门处理CSV文件,提供了...
在 DropWizard-Guice-Redis 项目中,Guice 是Google提供的轻量级依赖注入框架。依赖注入(Dependency Injection,简称DI)是一种设计模式,它有助于减少代码之间的耦合,提高代码的可测试性和可维护性。Guice 通过...
"api启动 球衣+guice+mybatis+gradle+liquibase 入门套件" 描述简单明了,表示这个项目是为API启动而设计的,整合了上述所有技术,提供了一个快速上手的基础环境,方便开发者学习和实践这些技术的集成使用。...
集成Guice则意味着Jackson的这些基础模块可以方便地与Google的依赖注入框架Guice一起使用。Guice是一个轻量级的IoC(Inversion of Control)容器,它可以自动管理对象的生命周期和依赖关系,使得代码更加简洁、可...
总之,DropWizard-Guice-Firebase 示例项目提供了一个实用的起点,展示了如何将 Java 服务与现代化的前端技术相结合,利用 DropWizard 提供稳定的基础架构,Guice 管理依赖,以及 Firebase 提供实时数据存储。...
【描述】提及的 "guice-persist-neo4j.zip" 是另一个开源项目,它是Google Guice框架与Neo4j图形数据库整合的一个扩展。Guice Persist是Guice框架的一部分,用于提供依赖注入(DI)支持到持久化层,而这个项目则是将...
2. Guice:Guice是Google开发的一款轻量级依赖注入(DI)框架,它是针对Java设计的。DI是一种设计模式,允许对象之间通过依赖关系进行解耦,提高了代码的灵活性和可测试性。Guice通过注解和配置,使得对象的创建和...
**Google Guice**是由Google开发的一款轻量级的依赖注入框架。它简化了依赖注入的过程,并且易于理解和使用。Guice支持以下特性: - **自动依赖注入**:无需显式地配置依赖项。 - **自定义扩展**:通过扩展点允许...
**GWT(Google Web Toolkit)**是Google推出的一款开源的Web开发框架,它允许开发者使用Java语言来编写前端代码,并自动生成高效的JavaScript。这使得开发者能够利用强大的Java生态系统,同时享受Web开发的便利性。 ...
为了更好地管理依赖关系,Xtext采用了Google Guice库。开发者可以通过定义模块来指定依赖注入的行为。 **4.2.2 获取注入器** 通过获取注入器,开发者可以访问到Xtext中的各种服务和组件。 #### 5. 运行时概念 **...
RoboGuice是一款轻量级的依赖注入框架,专为Android应用程序设计,它基于Google的Guice库进行了优化。在Android开发中,依赖注入(Dependency Injection)是一种重要的设计模式,可以帮助开发者减少代码间的耦合性,...
【GWT完整教程,Word版】是一份详尽的在线应用程序开发指南,专注于Google Web Toolkit(GWT)的教育和实践。本教程分为三个主要部分:入门、进阶和高级,旨在为不同水平的开发者提供逐步指导,帮助他们掌握GWT的精髓...
开发者可以使用自定义的DI容器,或者借鉴现有库如Google的Guice或Spring的Autowired。 7. **测试支持**:一个良好的MVC框架应提供方便的测试工具和API,使得单元测试和集成测试变得简单。 8. **安全性**:考虑到...