将Guice依赖注入添加到web.xml

时间:2015-10-01 03:56:23

标签: java servlets dependency-injection guice

我在项目中使用Guice将依赖注入到Servlet中。我们有一个ServletModule定义了serve()。with()配置。一切正常。

我现在需要能够在web.xml中包含一个带有servlet的webapp。所有文档都说将GuiceFilter添加到web.xml然后在ServletModule中使用programattic配置,但是我想知道是否可以让Guice将依赖项注入到web.xml中配置的servlet中?

我希望能够在web.xml中定义servlet,例如:

 <servlet>
   <servlet-name>test</servlet-name>
   <servlet-class>TestServlet</servlet-class>
 <servlet>

创建servlet时,容器只调用no-arg构造函数。是否可以更改此行为以便Guice在创建时创建servlet并注入?

2 个答案:

答案 0 :(得分:1)

您可能需要在TestServlet中使用Guice作为服务定位器。

    TestServlet(Foo foo){ ... } // please inject foo!

    TestServlet()
    {
        this( MyGuiceServletConfig.injector.getInstance(Foo.class) );
    }

--

public class MyGuiceServletConfig extends GuiceServletContextListener {

    public static final Injector = Guice.createInjector(new MyServletModule());

    @Override
    protected Injector getInjector() {
      return injector; 
    }
}

(他们说DI框架不是侵入性的:)

答案 1 :(得分:1)

<ListView DragOver="DragOver" AllowDrop="True" > <ListView.ItemTemplate> <DataTemplate> <ListView ManipulationMode="None" SelectionMode="Single" ScrollViewer.VerticalScrollBarVisibility="Hidden" CanDragItems="True" Drop="ListViewDrop" DragItemsStarting="DragStarting" AllowDrop="True" DragOver="DragOver" DragLeave="DragLeave" > <ListView.ItemsPanel> <ItemsPanelTemplate> <StackPanel Orientation="Vertical" /> </ItemsPanelTemplate> </ListView.ItemsPanel> </ListView> </DataTemplate> </ListView.ItemTemplate> <ListView.ItemsPanel> <ItemsPanelTemplate> <StackPanel Orientation="Vertical"></StackPanel> </ItemsPanelTemplate> </ListView.ItemsPanel> 明确设置了injector.injectMembers(obj)个字段:

@Inject

The docs推荐@Inject Foo foo; TestServlet() { // wherever your injector instance is defined ...getInjector().injectMembers(this); }  虽然我还没有用过它。