如何将特定依赖项绑定到页面,并为该页面上的组件注入?
我在我的wicket应用程序中设置了一个环境,使用(非常小的)wicket-ioc和wicket-spring库,我可以在其中调用InjectorHolder.getInjector()。inject(component),以便注入组件与依赖。我的所有wicket组件都由Spring通过IComponentInstantiationListener注入,这部分工作(我用它来进行hibernate访问)。
我有一个可序列化的对象(ComponentGraph),我想将其作为一个字段存储在Page上。我如何让Spring知道组件所在的页面,并在声明带有@SpringBean的ComponentGraph字段时为该页面注入正确的ComponentGraph?
如果有人能指出我正确的方向,我将不胜感激。我对Wicket有着扎实的把握,但在这一点上,Spring对我来说仍然是一个陌生概念的迷宫。 =)
答案 0 :(得分:1)
这听起来不像是Spring的工作。
但是,我不知道你的ComponentGraph的范围,所以我必须做一些猜测。
a)如果每个用户有一个,请将其存储在custom session object。
中 b)如果每个页面实例有一个,请创建一个基页类,所有这些页面都从该类继承。让它有一个带有getter和setter的componentGraph
字段。
c)如果每个页面有一个类,请在帮助bean中保留一个类型为<Class, ComponentGraph>
的地图(可通过类似helper.getComponentGraphForPageType(this.getClass())
访问。这可以(并且应该)通过Spring注入
答案 1 :(得分:0)
Spring支持请求和会话范围,但不知道Wicket页面范围是什么。不过不用担心。如果您将图形工厂注入页面,您可以执行以下操作:
public class Page extends WebPage {
@SpringBean private GraphFactory factory;
private ObjectGraph graph = null;
public Page() {
...
}
protected ObjectGraph getGraph() {
if (graph == null) graph = factory.createGraph();
return graph;
}
}
创建图表后,它将按预期与您的页面序列化。