如何将弹簧注入的依赖项绑定到wicket页面?

时间:2010-11-16 04:05:07

标签: java spring dependency-injection wicket

如何将特定依赖项绑定到页面,并为该页面上的组件注入?

我在我的wicket应用程序中设置了一个环境,使用(非常小的)wicket-ioc和wicket-spring库,我可以在其中调用InjectorHolder.getInjector()。inject(component),以便注入组件与依赖。我的所有wicket组件都由Spring通过IComponentInstantiationListener注入,这部分工作(我用它来进行hibernate访问)。

我有一个可序列化的对象(ComponentGraph),我想将其作为一个字段存储在Page上。我如何让Spring知道组件所在的页面,并在声明带有@SpringBean的ComponentGraph字段时为该页面注入正确的ComponentGraph?

如果有人能指出我正确的方向,我将不胜感激。我对Wicket有着扎实的把握,但在这一点上,Spring对我来说仍然是一个陌生概念的迷宫。 =)

2 个答案:

答案 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;
    }
}

创建图表后,它将按预期与您的页面序列化。