Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/367.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 从华夫格/Pico转换为Struts2/Guice_Java_Struts2_Guice_Picocontainer - Fatal编程技术网

Java 从华夫格/Pico转换为Struts2/Guice

Java 从华夫格/Pico转换为Struts2/Guice,java,struts2,guice,picocontainer,Java,Struts2,Guice,Picocontainer,我的任务是将我自己在华夫框架中开发的应用程序(使用PicoContainer作为DI机制)转换为我们新的“堆栈”,即使用Struts2作为框架,Guice作为DI机制。有没有人能提供一些有用的建议,告诉我们如何以最小的痛苦做到这一点,同时充分利用新框架和DI机制 非常感谢。是的,我意识到这个问题有点模糊,但我最终还是完成了。DI的华夫格/Pico机制使用一个称为注册器的类来设置您想要在webapp中注入的类及其范围。他们网站上的例子是: public class MyRegistrar ext

我的任务是将我自己在华夫框架中开发的应用程序(使用PicoContainer作为DI机制)转换为我们新的“堆栈”,即使用Struts2作为框架,Guice作为DI机制。有没有人能提供一些有用的建议,告诉我们如何以最小的痛苦做到这一点,同时充分利用新框架和DI机制


非常感谢。

是的,我意识到这个问题有点模糊,但我最终还是完成了。DI的华夫格/Pico机制使用一个称为注册器的类来设置您想要在webapp中注入的类及其范围。他们网站上的例子是:

 public class MyRegistrar extends AbstractRegistrar {  

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

   public void application() {  
     register("helloworld", HelloWorldController.class);  
   }  
 } 
此示例显示了一个应用程序范围的类-对于会话和请求范围,只需将它们放在相关的
session()
request()
方法中即可

使用Struts2和Guice,事情的结构略有不同。首先使用Guice,它使用构造函数上方的
@Inject
注释注入依赖项。注入配置是通过名为Modules的类完成的,这些类必须重写名为
configure()
的方法,以便将接口绑定到它们的类上——下面给出了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.class
RequestScoped.class
,因此转换相当简单

关于Struts2,那里使用的依赖注入实际上是最终成为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>

支柱2
org.apache.struts2.dispatcher.ng.filter.strutspreadexecutefilter
支柱2
/* 
这应该足以让任何有类似设置问题的人启动