java - 从 Waffle/Pico 转换为 Struts2/Guice

标签 java struts2 guice picocontainer

我的任务是将我自己在 Waffle 框架中使用 PicoContainer 作为 DI 机制开发的应用程序转换为我们的新“堆栈”,即使用 Struts2 作为框架,并使用 Guice 作为 DI 机制。有没有人对如何以最小的痛苦做到这一点并同时充分利用新框架和 DI 机制有任何有用的指导?

提前非常感谢。

最佳答案

是的,我意识到这个问题有点模糊,但我最终还是解决了。 DI 的 Waffle/Pico 机制利用一个名为 Registrar 的类来设置您想要注入(inject)的类及其在 Web 应用程序中的范围。他们网站上的示例是:

 public class MyRegistrar extends AbstractRegistrar {  

   public MyRegistrar(Registrar delegate) {  
     super(delegate);  
   }  

   public void application() {  
     register("helloworld", HelloWorldController.class);  
   }  
 } 

此示例显示了一个应用程序范围的类 - 对于 session 和请求范围,您只需将它们放在相关的 session()request() 方法中即可。

对于 Struts2 和 Guice,事情的结构略有不同。首先使用 Guice,它使用构造函数上方的 @Inject 注释注入(inject)依赖项。注入(inject)配置是通过名为 Modules 的类完成的,这些类必须重写名为 configure() 的方法,以便将接口(interface)绑定(bind)到其类 - 下面给出了 Google 的示例。

public class BillingModule extends AbstractModule {
  @Override 
  protected void configure() {
    bind(TransactionLog.class).to(DatabaseTransactionLog.class);
    bind(CreditCardProcessor.class).to(PaypalCreditCardProcessor.class);
    bind(BillingService.class).to(RealBillingService.class);
  }
}

范围也在这些模块中配置。 Singleton 实际上是一个应用程序范围的类,可以这样指定:

bind(TransactionLog.class).to(InMemoryTransactionLog.class).in(Singleton.class);

但是 Guice 还具有 SessionScoped.classRequestScoped.class,因此转换相当简单。

关于Struts2,那里使用的依赖注入(inject)实际上是最终成为Guice的早期版本,因此将这一行添加到struts.xml就成了问题

<constant name="struts.objectFactory" value="guice" />

并在web.xml中指定StrutsPrepareAndExecuteFilter

<filter>         
    <filter-name>struts2</filter-name>
    <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter </filter-class>
</filter>     
<filter-mapping>
    <filter-name>struts2</filter-name>
    <url-pattern>/* </url-pattern>
</filter-mapping>

这应该足以让任何有类似设置问题的人开始使用。

关于java - 从 Waffle/Pico 转换为 Struts2/Guice,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1262524/

相关文章:

java - 如何在我的 TextView 中以粗体和多色显示文本

model-view-controller - 就 MVC 模式而言,Struts 2 中使用的 Action 是什么?

java - Struts2 中的表单验证

javascript - struts2与jquery单选按钮事件问题

java - Netflix Karyon 不使用 Governator 创建资源类

java - 使用 vertx embedded 和 Guice 为 Verticles 设置多个实例

java - IBM Websphere JPA 配置 - 如何更新 persistence.xml

java - 有人可以解释为什么 4 & 0xFFFF - 1 仍然是 4 吗?

java - 存在哪些用于创建原始多部分电子邮件的库?

java - 我应该在方法参数中还是在 Java 的父构造函数中传递对象