GoogleGuice试用

阅读更多

       日前Google推出了他自己的轻量级依赖注入(dependency inject)框架——Guice。Guice依靠Java新的Annotation特性,取代了XML的配置,并提供了灵活的注入方法,可以注入到成员、参数、方法等多个位置。在它的官方页面上有一份新手入门的文档,另外可以获取相关信息的就是两个人的blog链接。

        初步试用了一下,感觉Guice的Annotation机制和Spring的XML配置功能上基本是完全等价的,只是一个是写在代码中,一个是写在配置文件中,这个也是日前JavaEye上面关于Annotation的讨论的核心——Annotation的引入究竟是倒退还是进步?我对依赖注入及两个框架都还不是了解的非常透彻,不好妄加评论。

      下面就来说说Guice的试用感想:

      Guice的注入机制是靠Binder、Injector、Module等类来实现的。开发者实现Module这个接口,编写他的configure(Binder binder)方法。这个方法的功效相当于Spring中用于配置的XML文件,它通过系统传递过来的参数binder进行注入规则的说明。基础的方法链就像是这个样子:

    binder.bind(Service.class).to(ServiceImpl.class)

    上面这条指令声明了用ServiceImpl来注入需要Service的地方。

    @Inject
     public void setService(Service service){
       this.service = service;
    }

   注意到@Inject这个Annotation就是告诉Guice,这里需要注入。

   另外,你还可以在不同的地方将同一个类注入为不同的实现,这需要借助额外Annotation的帮助:

   binder.bind(Person.class).annotatedWith(Husband.class).to(Man.class)

    这个绑定的声明将下面情况下的Person绑定为Man类型

    private @Inject @Husband Person husband;

   编辑好你自己的Module之后,注入的规则就创建完毕了。在需要注入的地方添加@Inject。Guice的工作原理从这张图里可以看的很清楚:


    这样获得Injector之后,调用injector.getInstance(Class clazz)可以得到实体

Injector injector = Guice.createInjector(new MyModule());

    我的这个例子和webapp完全没有关系,只是试验了一下Guice的依赖注入过程,真正的web使用应该是没有手动获取Injector的过程的。TestGuiceGoogle.rar
 


你可能感兴趣的:(Spring,框架,XML,Google,Web)