Guice与Spring框架的区别

来源:JavaEye 作者: 2007-12-14 出处:pcdog.com

.net  eclipse  google  hibernate  java  
下一页 1 2 

    依赖注入,DI(Dependency Injection),它的作用自然不必多说,提及DI容器,例如spring,picoContainer,EJB容器等等,近日,google诞生了更轻巧的DI容器……Guice!
废话不多讲了,先看看Guice是如何实现注入的吧。
定义一个简单的service接口和它的实现吧:

Guice与Spring框架的区别(图一)
Guice与Spring框架的区别(图二)public interface MyService ...{
Guice与Spring框架的区别(图三)    void myMethod();
Guice与Spring框架的区别(图四)}
Guice与Spring框架的区别(图五)
Guice与Spring框架的区别(图一)Guice与Spring框架的区别(图二)public class MyServiceImpl implements MyService ...{
Guice与Spring框架的区别(图六)Guice与Spring框架的区别(图七)    public void myMethod() ...{
Guice与Spring框架的区别(图三)        System.out.println("Hello,World!");
Guice与Spring框架的区别(图八)    }
Guice与Spring框架的区别(图四)}
Guice与Spring框架的区别(图五)

以上是最普通的接口和其实现,没什么可说的。
定义一个测试类,这个类里边包括service对象的一个引用,这个对象是需要Guice进行注入的

Guice与Spring框架的区别(图五)import com.google.inject.Inject;
Guice与Spring框架的区别(图一)Guice与Spring框架的区别(图二)public class Client ...{
Guice与Spring框架的区别(图三)    MyService service;
Guice与Spring框架的区别(图三)    @Inject //告诉容器,这里的service对象的引用,需要进行注入
Guice与Spring框架的区别(图六)Guice与Spring框架的区别(图七)    void setService(MyService service) ...{ //这里的方法名字可以任意定义
Guice与Spring框架的区别(图三)        this.service = service;
Guice与Spring框架的区别(图八)    }
Guice与Spring框架的区别(图六)Guice与Spring框架的区别(图七)    public void myMethod() ...{
Guice与Spring框架的区别(图三)        service.myMethod();
Guice与Spring框架的区别(图八)    }
Guice与Spring框架的区别(图四)}
Guice与Spring框架的区别(图五)

   这里除了加了一个@Inject,和Spring的配置没有任何的区别,@Inject,是表示对容器说,这里的service需要注射,等到运行的时候,容器会拿来一个实例给service,完成注射的过程。

定义Guice的Module文件 告诉容器如何进行注入

Guice与Spring框架的区别(图五)import com.google.inject.Binder;
Guice与Spring框架的区别(图五)import com.google.inject.Module;
Guice与Spring框架的区别(图五)import com.google.inject.Scopes;
Guice与Spring框架的区别(图五)
Guice与Spring框架的区别(图一)Guice与Spring框架的区别(图二)public class MyModule implements Module ...{
Guice与Spring框架的区别(图六)Guice与Spring框架的区别(图七)    public void configure(Binder binder) ...{    binder.bind(MyService.class).to(MyServiceImpl.class).in(Scopes.SINGLETON);
Guice与Spring框架的区别(图三)    // 这句代码的意思是说:运行时动态的将MyServiceImpl对象赋给MyService定义的对象,而且这个对象是单例的。
Guice与Spring框架的区别(图八)    }
Guice与Spring框架的区别(图四)}
Guice与Spring框架的区别(图五)

创建测试类

Guice与Spring框架的区别(图五)import com.google.inject.Guice;
Guice与Spring框架的区别(图五)import com.google.inject.Injector;
Guice与Spring框架的区别(图五)
Guice与Spring框架的区别(图一)Guice与Spring框架的区别(图二)public class Test ...{
Guice与Spring框架的区别(图三)
Guice与Spring框架的区别(图六)Guice与Spring框架的区别(图七)    public static void main(String[] args) ...{
Guice与Spring框架的区别(图三)MyModule module = new MyModule();// 定义注射规则
Guice与Spring框架的区别(图三)Injector injector = Guice.createInjector(module);// 根据注射规则,生成注射者
Guice与Spring框架的区别(图三)        Client client = new Client();
Guice与Spring框架的区别(图三)injector.injectMembers(client);// 注射者将需要注射的bean,按照规则,把client这个客户端进行注射
Guice与Spring框架的区别(图三)        client.myMethod();    
Guice与Spring框架的区别(图八)}
Guice与Spring框架的区别(图四)}
Guice与Spring框架的区别(图五)

运行测试类,控制台输出:Hello,World!
完成注入过程

下面看看Guice还有哪些其它的使用特性。
1,如果在实现你确定MyService定义的对象,就要被注射为MyServiceImpl而不是其它的实现类的话,可以在MyService接口加上@ImplementedBy(MyServiceImpl.class)

Guice与Spring框架的区别(图五)import com.google.inject.ImplementedBy;
Guice与Spring框架的区别(图五)
Guice与Spring框架的区别(图五)@ImplementedBy(MyServiceImpl.class)
Guice与Spring框架的区别(图五)//我总觉得这样有点背离了依赖注入的初衷了
Guice与Spring框架的区别(图一)Guice与Spring框架的区别(图二)public interface MyService ...{
Guice与Spring框架的区别(图三)    void myMethod();
Guice与Spring框架的区别(图四)}
Guice与Spring框架的区别(图五)

更多内容请看PCdog.com--Spring开发技术篇  Spring框架技术篇专题
下一页 1 2 
上一篇:IIS+Resin集成多个站点和数据库连接池
下一篇:java与c#中二维数组的区别