用Guice写Java - 编程入门网
// Match classes.
annotatedWith(Transactional.class), // Match methods.
new TransactionInterceptor() // The interceptor.
);
尽量让匹配代码多做些过滤工作,而不是在拦截器中过滤。因为匹配代码只在启动时 运行一次。 静态注入 静态字段和方法会增加测试和复用的难度,但有的时候你唯一的选择就是保留一个 Injector 的静态引用。 在这些情况下,Guice 支持注入可访问性较少的静态方法。例如,HTTP 会话对象经常 需要被串行化,以支持复制机制。但是,如果你的会话对象依赖于一个作用域为容器生命 周期的对象,该怎么办呢?我们可以保留一个该对象的临时引用,但在反串行化的时候, 我们该如何再次找到该对象呢? 我们发现更实用的解决方案是使用静态注入:
Guice 从不自动实施静态注入。你必须使用 Binder 显式请求 Injector 在启动后注 入你的静态成员: binder.requestStaticInjection(User.class); 静态注入是一个很难避免的祸害,它会使测试难度加大。如果有办法避开它,你多半 会很高兴的。 用Guice写Java(12)时间:2011-04-02 王咏刚可选注入 有时你的代码应该在无论绑定是否存在的时候都能工作。在这些情况下,你可以使用 @Inject(optional=true),Guice 会在有绑定可用时,用一个绑定实现覆盖你的缺省实现 。例如: @Inject(optional=true) Formatter formatter = new DefaultFormatter(); 如果谁为 Formatter 创建了一个绑定,Guice 会基于该绑定注入实例。否则,如果 Formatter 不能被注入(参见隐式绑定),Guice 会忽略可选成员。 可选注入只能应用于字段和方法,而不能用于构造函数。对于方法,如果一个参数的 绑定找不到,Guice 就不会注入该方法,即便其他参数的绑定是可用的。 绑定到字符串 只要有可能,我们就尽量避免使用字符串,因为它们容易被错误拼写,对工具不友好 ,等等。但使用字符串而不是创建定制的标注对于“快而脏”的代码来说仍是有用的。在 这些情况下,Guice 提供了@Named 和 Names。例如,一个到字符串名字的绑定: import static com.google.inject.name.Names.*; ... bind(named("bob")).to(10); 会匹配下面的注入点: @Inject @Named("bob") int score; Struts 2支持 要在 Struts 2.0.6 或更高版本中安装 Guice Struts 2 插件,只要将 guice- struts2-plugin-1.0.jar 包含在你的 Web 应用的 classpath 中,并在 struts.xml 文 件中选择 Guice 作为你的 ObjectFactory 实现即可: <constant name="struts.objectFactory" value="guice" /> Guice 会注入所有你的 Struts 2 对象,包括动作和拦截器。你甚至可以设置动作类 的作用域。你也可以在你的 struts.xml 文件中指定 Guice 的 Module: <constant name="guice.module" value="mypackage.MyModule"/> 如果你的所有绑定都是隐式的,你就根本不用定义模块了。 一个计数器的例子 例如,我们试图统计一个会话中的请求数目。定义一个在会话中存活的 Counter 对象 :
用Guice写Java(13)时间:2011-04-02 王咏刚接下来,我们可以将我们的计数器注入到动作中:
|
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |