`
sun.zhang
  • 浏览: 25146 次
  • 性别: Icon_minigender_1
  • 来自: 广州
最近访客 更多访客>>
社区版块
存档分类
最新评论

自己学习Guice的例子[一]

    博客分类:
  • JAVA
阅读更多
网上已经有很多个Guice的例子了...随便贴贴

定义一个接口:
/**
 * 
 */
package test2;

import com.google.inject.ImplementedBy;

/**
 * @author sun.zhang
 * @Date 2008-4-18
 * @Email myzeer@gmail.com
 *
 */
//@ImplementedBy(MockService.class)
public interface Service {
	
	public void sayHello();
	
}



接口实现类:
/**
 * 
 */
package test2;

/**
 * @author sun.zhang
 * @Date 2008-4-18
 * @Email myzeer@gmail.com
 *
 */
public class ServiceImp implements Service{

	public void sayHello() {
		System.out.println("Hello World ...");
	}

}


模块绑定配置类:
/**
 * 
 */
package test2;

import com.google.inject.Binder;
import com.google.inject.Module;

/**
 * @author sun.zhang
 * @Date 2008-4-18
 * @Email myzeer@gmail.com
 *
 */
public class TestModule implements Module {

	/* (non-Javadoc)
	 * @see com.google.inject.Module#configure(com.google.inject.Binder)
	 */
	public void configure(Binder binder) {
		binder.bind(Service.class).to(ServiceImp.class);
	}

}


客户端类:
/**
 * 
 */
package test2;

import com.google.inject.Inject;

/**
 * @author sun.zhang
 * @Date 2008-4-18
 * @Email myzeer@gmail.com
 *
 */
public class Client {
	
	private Service service;

	public Client(){}
	
	@Inject									//依赖注入必须的标注
	public Client (Service service){
		System.out.println("This is constructor injector...");
		this.service = service;
	}

//	第二种,set注入方式
//	@Inject
//	public void setClient(Service service){
//		System.out.println("This is set injector...");
//		this.service = service;
//	}
	
	public void sayHello(){
		service.sayHello();
	}
	
}


主函数:
/**
 * 
 */
package test2;

import com.google.inject.Guice;
import com.google.inject.Injector;
import com.google.inject.Module;

/**
 * @author sun.zhang
 * @Date 2008-4-18
 * @Email myzeer@gmail.com
 *
 */
public class GuiceMain {
	
	public static void main(String[] args) {
		
		Service service = new ServiceImp();
//		Service service = new MockService();  // 第二个service的实现
		
		Client client = new Client(service);	//构造器注入
		Module module = new TestModule();
		
		Injector injector = Guice.createInjector(module);//向Guice要注射器
		injector.injectMembers(client);
		client.sayHello();
	}
}



说明:
如果当Client.class中使用两次@inject标签,那么Guice将会自动注入两次。如:

	@Inject									//依赖注入必须的标注
	public Client (Service service){
		System.out.println("This is constructor injector...");
		this.service = service;
	}

	@Inject
	public void setClient(Service service){
		System.out.println("This is set injector...");
		this.service = service;
	}

虽然本意并不是注入两次,只是想提供两个注入方法而已……
2
4
分享到:
评论

相关推荐

    Guice 中文文档 例子

    "Guice 中文文档 例子" 包含了 Guice 的中文文档和实际操作示例,这对于学习 Guice 非常有帮助。文档可能涵盖了以下内容: 1. **基础概念介绍**: 解释依赖注入的概念和 Guice 的基本工作原理。 2. **模块配置**: ...

    struts2+ibatis3+guice2.0使用完整例子

    采用的框架是struts2.1.8,ibatis3,guice2.0,完整的产品模块和权限模块(部分功能)例子。这是smeite.com商城第一版本的部分代码,测试通过。 希望给需要的朋友一个借鉴。 自我认为是学习Ibatis3比较好的例子,覆盖...

    Google Guice入世(转 附带一Guice1.0的简单测试代码)

    在上述例子中,`MyTest`使用Guice创建了一个`Injector`,然后在`setUp()`方法中注入了`MyService`的实例。`MyModule`定义了`MyService`的绑定规则,即使用`MyServiceImpl`作为其实现。 5. **实际应用** Guice适用...

    初试Guice(转)

    **标题:“初试Guice(转)”,描述:“demo 很好的例子,博文链接:https://phantom.iteye.com/blog/92183”** 这篇文章提到了Guice,这是...学习和理解Guice的使用,对于任何Java开发者来说都是提高生产力的重要步骤。

    AssistedInject,辅助注射jsr 330。.zip

    在Java世界中,JSR 330(Java标准版330)是一个重要的依赖注入(Dependency Injection,简称DI)规范,它定义了标准的注解来管理对象的生命...研究源码,尤其是例子和测试用例,能加深对这一高级依赖注入技术的理解。

    camel-manual-2.10.4.pdf

    无论使用哪种传输方式,都可以使用相同的API进行工作,因此只需学习一次API,就可以与所有内置的组件进行交互。 Apache Camel提供了对Bean绑定的支持,并且与Spring、Blueprint和Guice等流行框架无缝集成。它还广泛...

    XTEXT 开发教程

    1. **第一个例子**:通过一个简单的例子来了解 Xtext 语法的基本结构。 2. **语法** - **语言声明**:定义 DSL 的名称和版本。 - **EPackage 声明**:声明 EPackage 以便于与其他 EMF 模型交互。 - **规则**:...

    Camel示例说明

    1. **ActiveMQ Camel Tomcat 示例**:此示例展示了如何在运行于Apache Tomcat的应用程序中嵌入Apache ActiveMQ和Camel,提供了一个将消息系统与Web应用结合的例子。 2. **Aggregate 示例**:展示的是Camel 2.3中的...

    Xtext手册-用于开发语言工具的框架

    - **第一个例子**:通过一个简单的例子介绍如何使用Xtext的语法语言定义基本的语法规则。 - **语法**:详细介绍了Xtext语法语言的各个组成部分及其作用。 - **语言声明**:定义语言的基本信息。 - **EPackage声明*...

    Android应用源码之用Roboguice实现依赖注入-.zip

    Roboguice是一款针对Android平台的轻量级依赖注入库,基于Google的Guice框架进行构建,它通过注解的方式来简化对象之间的依赖关系。 首先,我们需要理解依赖注入的基本概念。在传统的编程中,对象通常会直接创建...

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

    通过分析`todolist`目录下的源代码,我们可以学习到如何在Play Framework 2.0中创建一个简单应用,包括如何处理HTTP请求,如何定义模型和视图,以及如何使用数据库。这个教程为初学者提供了一个很好的起点,让他们...

    xtext基础入门说明资料

    为了更好地理解Xtext的语法语言,本节提供了一个简单的例子。通过这个例子,读者可以了解语法的基本结构和特点。 **3.2 语法** **3.2.1 语言声明** 每个Xtext语法文件都以`grammar`关键字开头,后面跟上语言的...

    how to use xtext

    通过一个简单的例子介绍Xtext语法语言的基本用法,包括语言声明、EPackage声明、规则定义等。 #### 4.2 语法 详细解释Xtext语法语言的构成,包括语言声明、EPackage声明、规则、解析器规则、数据类型规则、枚举...

    IOC的原理以及自定义使用

    虽然有许多成熟的IOC容器,如Spring、Guice等,但理解其原理并自定义实现有助于深入学习。自定义IOC主要包括以下几个步骤: 1. **创建Bean仓库**:用于存储所有的Bean定义,包括类名、构造函数、依赖关系等信息。 2....

    没有数据库的shiro demo

    在这个例子中,Subject并不直接与数据库交互,而是通过`shiro.ini`文件获取其认证和授权信息。 2. **Realms**: Realms是Shiro获取认证和授权信息的接口。在无数据库的环境中,我们创建一个 IniRealm 实例,它从`...

    compress压缩网站

    在这个例子中,`GzipResponseWrapper`是一个自定义的响应包装器,负责实际的压缩工作。它会在`finish`方法中完成压缩并写入到原始的HttpServletResponse中。 压缩HTML文件不仅可以减少带宽使用,还可以帮助应对慢速...

    DependencyInjection22

    3. **接口注入**:虽然在Java中不常见,但某些框架如Guice支持这种注入方式,通过实现特定的接口来接收依赖。 在Java生态系统中,Spring框架是最著名的依赖注入库。Spring提供了多种注入方式,并且还具有AOP(面向...

    play-simple:带有简单di和http基本身份验证的示例播放应用

    在"play-simple"的这个例子中,可能是通过构造函数或者静态工厂方法来实例化和注入所需的依赖。 另一方面,HTTP基本身份验证是一种常见的Web安全机制,用于验证客户端(通常是浏览器)向服务器发送请求时的身份。在...

    LightBulbMvvM

    在这个例子中,视图可能包括了灯泡的图标、开关按钮和亮度滑动条等UI元素,用于展示和控制灯泡的状态。 6. **ViewModel**: 视图模型是连接模型和视图的纽带,它提供数据绑定和命令功能,使得视图的改变能驱动模型...

Global site tag (gtag.js) - Google Analytics