我在项目中使用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并注入?
答案 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);
}
虽然我还没有用过它。