最近在学习Guice的源码,尝试写写blog,做做笔记!
一、先简单介绍下
使用Google Guice作为IOC容器已有一段时间了,当前感觉良好。整合mybatis、struts2什么的也非常方便,个人感觉它甚至比spring方便,用起来没啥觉得不爽的。
优点:体积小巧,代码量少,方便我深入学习源码;其次,是Google开源出来的组件,代码质量和性能应该都有保障,值得我使用和深入学习。
不足:guice更新频率较低,但亦无妨啦,目前就很好用了,当然我也希望它可以更好。目前它的最新版本是3.0,我这次学习源码也是找了3.0,项目地址在
http://code.google.com/p/google-guice 。
二、目前发现的几个关键类
com.google.inject.TypeLiteral:工具类,对java类型泛型相关的类型提供更精准的定义。
com.google.inject.internal.MoreTypes:工具类,里面有ParameterizedTypeImpl、GenericArrayTypeImpl和WildcardTypeImpl这3个静态类,用于转化为Guice内的规范化的类。
com.google.inject.util.Types:也是一个工具类,有点像个工厂,主要生产MoreTypes里面那3个静态类相关的实例。
com.google.inject.Key:感觉最重要,从Guice中最终都是要通过Key来获取对应Class的Instance。
com.google.inject.internal.BindingImpl:和Key对应,绑定的Key的对应实现。
com.google.inject.spi.InjectionPoint:注入点,用于识别构造方法、普通方法和属性的注入位置。
com.google.inject.spi.Dependency:貌似用于记录有哪些InjectionPoint,后面用来做清理工作的?
嗯,上面也仅是我一知半解的猜测,后面深入学习后再进一步看看是否猜对了。
三、关于初始化
Guice.createInjector(
new Module() {
public void configure(Binder binder) {
binder.bind(Service.class).to(DemoService.class);
}
}
);
我们一般会这样实例化Injector,Guice内部调用Module内的configure方法,接着binder.bind(Service.class).to(DemoService.class)会把Service.class按一定的算法转化为Key,DemoService.class转化为BindingImpl,并把Key和BindingImpl关联起来,后面注入再用。更多的细节在InjectorShell.Builder#build方法,不过我还没具体看完。
四、关于获取Instance
injector.getInstance(Service.class)
一般是用上面这个方式来获取Instance(实际项目中应该不需要我们显示调用的,例如web项目的struts2 + guice + mybatis可以把组件全托管给guice,不需要我们显式获取实例,这里只是做个简介),Service.class会被转化为Key,然后根据Key获得BindingImpl,然后再获得provider,接着provider.get()就获得Instance了。核心在InjectorImpl#getProvider方法。
好,今晚先写这么多了!!!
分享到:
相关推荐
在Guice 3.0源码中,我们可以深入学习以下几个关键知识点: 1. **依赖注入(Dependency Injection)**:Guice的核心概念是依赖注入,它允许我们声明所需的服务或对象,而无需在代码中硬编码创建这些对象的方式。这...
**标题:“jersey2.15集成guice笔记”** 在Java Web开发中,Jersey是一个流行的RESTful服务实现框架,而Guice是Google提供的一个轻量级依赖注入(DI)容器。这篇笔记将深入探讨如何将这两个强大的工具集成为一体,...
guice 学习资料,快速掌握guice的编程技巧以及了解其机制。
guice.jar guice.jar guice.jar guice.jar guice.jar guice.jar guice.jar
**Google Guice**,全称为Google Injection,是一个轻量级的依赖注入框架,它通过注解(Annotations)来实现对象的自动装配,简化了Java应用的构造和管理。Guice的核心理念是帮助开发者摆脱手动创建对象和管理对象...
MyBatis-Guice 3.6 是一个集成框架,它是MyBatis——一个流行的Java持久层框架——与Google的Guice依赖注入框架的完美结合。这个版本的MyBatis-Guice旨在简化MyBatis的配置过程,通过Guice的自动装配特性,帮助...
Guice 是 Google 推出的一款轻量级的依赖注入框架,专为 Java 5 及其后续版本设计。依赖注入(Dependency Injection,简称 DI)是一种设计模式,它允许开发者在不直接创建对象的情况下,将依赖关系从代码中解耦出来...
2. **易用性**:Guice的学习曲线平缓,开发者可以快速上手。 3. **可扩展性**:支持自定义绑定和拦截器,方便集成其他框架或库。 4. **灵活性**:Guice允许在运行时动态地配置依赖关系。 5. **强大的社区支持**:...
赠送jar包:guice-4.0.jar; 赠送原API文档:guice-4.0-javadoc.jar; 赠送源代码:guice-4.0-sources.jar; 赠送Maven依赖信息文件:guice-4.0.pom; 包含翻译后的API文档:guice-4.0-javadoc-API文档-中文(简体)版...
**基于Guice的简单项目** 在Java开发中,依赖注入(Dependency Injection,简称DI)是一种设计...通过学习和实践这个项目,开发者可以更好地掌握Guice的工作原理和使用技巧,为未来的Java项目带来更高效的代码结构。
赠送jar包:guice-assistedinject-3.0.jar; 赠送原API文档:guice-assistedinject-3.0-javadoc.jar; 赠送源代码:guice-assistedinject-3.0-sources.jar; 赠送Maven依赖信息文件:guice-assistedinject-3.0.pom;...
- **简洁的API**:Guice的API设计简单易用,减少了代码量,降低了学习曲线。 - **强大的注解支持**:Guice对Java标准注解和自定义注解的广泛支持,使代码更具表达力。 - **模块化**:Guice的模块化设计方便了组件...
Guice用户指南翻译提供了详细的文档,帮助开发者理解和使用Guice框架,包括安装、配置、依赖注入、生命周期管理以及与其他框架的集成等各个方面,是学习和应用Guice的重要资源。通过深入阅读和实践,开发者可以更好...
本书《Google Guice: Agile Lightweight Dependency Injection Framework》旨在深入探讨Guice的核心概念和技术细节,并通过丰富的示例和背景信息帮助读者全面掌握这一强大的工具。 #### 二、Guice概述 Guice是由...
Guice是Google提供的一款轻量级的DI框架,用于简化Java应用的初始化和配置过程。本文将基于提供的文件,详细介绍Guice的基本概念、使用方法以及如何进行测试。 【描述】 Guice通过注解的方式实现了依赖注入,使得...
而 Google 的 Guice 则是一个流行的依赖注入框架,它简化了对象的创建和管理过程。本文将详细介绍如何将 Apache Shiro 集成到基于 Guice 的应用中。 #### Apache Shiro 与 Guice 集成概述 自 Shiro 1.2 版本起,...
Guice,全称Google Guice,是一款轻量级的依赖注入(Dependency Injection,简称DI)框架,由Google开发并开源。它主要用于简化Java应用程序的构造和管理,通过DI来解耦代码,使代码更易于测试、维护和扩展。Guice的...
#### 一、Google Guice 概览 **Google Guice** 是一个轻量级的 Java 依赖注入容器,它为 Java 5 及以上版本提供支持。与传统的对象创建方式相比,Guice 通过减少样板代码(boilerplate code)来提高开发效率,使得...
Google Guice是一个轻量级的依赖注入框架,由Google开发并维护,主要用于简化Java应用程序的构建和管理。依赖注入(Dependency Injection,简称DI)是一种设计模式,它可以帮助开发者减少代码间的耦合,提高代码的可...