在基于wicket弹簧的应用程序中,我可以使用以下方法将弹簧管理器注入到WebApplication类:

private void initManager() {
    ApplicationContext applicationContext = WebApplicationContextUtils.getRequiredWebApplicationContext(getServletContext());
    this.manager = (MyManager) applicationContext.getBean("manager");
}


我通常在init类的WebApplication方法内设置内部错误页面。有时我还会挂载一些可收藏的页面:

public class MyApplication extends WebApplication {

    @Override
    protected void init() {
        IApplicationSettings applicationSettings = getApplicationSettings();
        applicationSettings.setInternalErrorPage(ErrorPage.class);
        mountBookmarkablePage("privacy", PrivacyPage.class);
    }

    //............
}


我的WebPage类通常取决于我的经理类,例如:

public class ErrorPage extends WebPage {

    public ErrorPage() {
        MyApplication application = (MyApplication) getApplication();
        add(new EmailLink(application.getManager().getMailSupport()));
    }
}


因此,我的WebApplication类引用一个或多个页面,而我的页面引用WebApplication类。这是循环依赖吗?如果可以,我该如何避免呢?

最佳答案

我会说这不是循环依赖,而是配置。

但是,我认为您总是可以通过自动装配将经理bean注入到网页类中。

编辑:

您可能还需要在applicationContext.xml中启用spring注释,并在classpath中添加一些新的依赖项

参见applicationContext.xml示例at this address,除了扫描包名称外,您将非常相似。相应地更新这些值。

public class ErrorPage extends WebPage {

@Autowired
private MyManager myManager;

//setter getter methods as well
}

10-08 15:10