Guice示例

1.新建IWork接口:

package com.kay.interfaces;

public interface IWork {

public void work(String workname);
}

2.实现IWork接口:

package com.kay.impl;

import com.kay.interfaces.IWork;

public class Workimpl implements IWork{

public void work(String workname) {
        System.out.println(workname);
    }

}

3.来一个具体的work:

package com.kay.work;

import com.kay.impl.Workimpl;

public class Cooking {

private Workimpl work ;
    
    private String workname = "cooking";
    
    
    public void work(){
        work.work(workname);
    }
}

4.测试一下:

package com.kay.Test;

import com.kay.work.Cooking;

import junit.framework.TestCase;

public class CookingTest extends TestCase {

Cooking cook ;
    protected void setUp() throws Exception {
        cook = new Cooking();
    }
    public  void testcook(){
        cook.work();
    }

}

结果大家都知道,JUnit肯定是红条。下面使用Guice来注入:
改变Cooking类:

package com.kay.work;

import com.google.inject.Inject;
import com.kay.impl.Workimpl;

public class Cooking {

private Workimpl work ;
    
    private String workname = "cooking";
    
    @Inject
    public void Workimpl(Workimpl workimpl){
        this.work = workimpl;
    }
    
    public void work(){
        work.work(workname);
    }
}

创建类实现Module接口:

package com.kay.Module;

import com.google.inject.Binder;
import com.google.inject.Module;
import com.kay.impl.Workimpl;
import com.kay.interfaces.IWork;

public class MyModule implements Module {

public void configure(Binder binder) {
        binder.bind(IWork.class).to(Workimpl.class);
    }

}

改变一下测试类:

package com.kay.Test;

import com.google.inject.Guice;
import com.google.inject.Injector;
import com.kay.Module.MyModule;
import com.kay.work.Cooking;

import junit.framework.TestCase;

public class CookingTest extends TestCase {

Cooking cook ;
    MyModule mm ;
    protected void setUp() throws Exception {
        cook = new Cooking();
        mm = new MyModule(); 
    }
    public void testcook(){
        Injector in = Guice.createInjector(mm);
        in.injectMembers(cook);
        cook.work();
    }

}

时间: 2024-08-10 17:03:54

Guice示例的相关文章

Google Guice

Guice (读作"juice")是超轻量级的,下一代的,为Java 5及后续版本设计的依赖注入容器. 简介 Java企业应用开发社区在连接对象方面花了很大功夫.你的Web应用如何访问中间层服务?你的服务如何连接到登录用户和事务管理器?关于这个问题你会发现很多通用的和特定的解决方案.有一些方案依赖于模式,另一些则使用框架.所有这些方案都会不同程度地引入一些难于测试或者程式化代码重复的问题.你马上就会看到,Guice 在这方面是全世界做得最好的:非常容易进行单元测试,最大程度的灵活性和可

Google Guice之AOP

为增强依赖注入功能,Guice支持方法拦截器.通过这个特性可以让方法在每次执行前调用一个匹配(过滤)方法.这适用于横切性关注点(切面),例如事务控制,权限与日志记录等.因为拦截器将一个问题分割成切面而不是对象:所以拦截器使用又被称为面向切面编程(AOP). 大多数开发者不会直接编写方法拦截器,但是可能在一些类库中见到,需要进方法进行选择,创建一个拦截器并将它配置在Module中:例如Warp Persist. <span style="font-size:14px;">@R

Guava库学习:学习Guava EventBus(二)EventBus 事件订阅示例

原文地址:Guava库学习:学习Guava EventBus(二)EventBus 事件订阅示例 上一篇Guava库学习:学习Guava EventBus(一)EventBus,我们简单的对Guava基于事件的编程进行了介绍,学习和了解了EventBus类的使用,本篇起,我们通过一系列的示例代码深入的学习EventBus类,本篇学习Guava EventBus(二)EventBus 事件订阅示例.     订阅Subscribe 首先,我们假定定义了如下所示的TradeAccountEvent类

Google Guice之绑定方式

在Guice中,注入器的工作是装配对象图,当请求某一类型实例时,注入器根据对象图来判断如何创建实例.解析依赖.要确定如何解析依赖就需要通过配置注入器的绑定方式. 要创建绑定(Binding)对象,可以继承自AbstractModule类,然后覆盖其configure方法,在方法调用bind()方法来指来定每一次绑定,这些方法带有类型检查,如果你使用了错误的类型编译器就会报告编译错误.如果你已经写好了Module类,则创建一个Module类对象作为参数传递给Guice.createInjector

Google Guice之注入方式

在Guice中,注入方法有如下几种: 一.构造器注入(Constructor Injection) 使用构造器注入只要在构造方法上添加一个@Inject注解,该构造方法接收一些依赖参数,大多数的构造方法将这些参数 赋值给final字段. public class RealBillingService implements BillingService { private final CreditCardProcessor processorProvider; private final Tran

Guice 学习(九) WEB AND SERVLET

1.新建web工程,导入JAR包 2.配置web.xml <?xml version="1.0" encoding="UTF-8"?> <web-app id="WebApp_ID" version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema

Guice 学习初步(一)

1.Guice是什么? Guice是Google开发的一个轻量级,基于Java5(主要运用泛型与注释特性)的依赖注入框架(IOC).Guice非常小而且快.Guice是类型安全的,它能够对构造函数,属性,方法(包含任意个参数的任意方法,而不仅仅是setter方法)进行注入. 2.Guice和Spring的比较 和Spring有点类似,Guice也是个依赖注入框架,主要使用注解形式来完成依赖注入的过程,而不是像Spring一样主要使用XML(虽然也可以用注解,但是XML的配置还是作为Spring不

Guice 学习(八)AOP (面向切面的编程)

Guice的AOP还是很弱的,目前仅仅支持方法级别上的,另外灵活性也不是很高.看如下示例: Guice支持AOP的条件是: 类必须是public或者package (default) 类不能是final类型的 方法必须是public,package或者protected 方法不能使final类型的 实例必须通过Guice的@Inject注入或者有一个无参数的构造函数 且看示例代码 1.定义接口 package com.guice.AOP; import com.google.inject.Imp

guice的能力简述

guice这个google出的bean容器框架,ES有用到他. 能干什么 是一个bean容器 能AOP 能力细分与使用方式 以module创建injector.可以看成是一个容器.Module需要自定义且继承自他的AbstractModule.覆写config方法完成装配关系的确定.详细参见这里 绑定顶层接口到具体实现类.bind(TransactionLog.class).to(DatabaseTransactionLog.class); 支持bind(A).to(B) 然后链式的 bind(