Web applications Wicket-初始化外部类

Web applications Wicket-初始化外部类,web-applications,wicket,Web Applications,Wicket,我想在我的WicketApplication中初始化导入的Client.class,它与后端通信。我知道我必须在我的WebApplication.class中这样做(在init方法中,对吗?)。但是如何在Page.class中获取此实例?我如何与它沟通 感谢您的建议您可以使用getApplication()或WebApplication.get()获取当前应用程序。从那里,您应该能够将其类型缩小到您自己的实现,并在Client.class属性上调用getter。请记住,应用程序是所有用户之间的共

我想在我的WicketApplication中初始化导入的Client.class,它与后端通信。我知道我必须在我的WebApplication.class中这样做(在init方法中,对吗?)。但是如何在Page.class中获取此实例?我如何与它沟通


感谢您的建议

您可以使用
getApplication()
WebApplication.get()
获取当前应用程序。从那里,您应该能够将其类型缩小到您自己的实现,并在
Client.class
属性上调用getter。请记住,应用程序是所有用户之间的共享对象,如果您不想发生不愉快的事情,您的客户端属性必须是线程安全的…

实现这一点的最不紧密耦合的方法是使用依赖项注入框架,如Google Guice,并将实例注入到您的组件中。除此之外,塞德里克·盖蒂的回答很好地涵盖了解决方案

使用DI将提供额外的好处,即不必担心为单元测试准备不同的实现,因为您可以轻松地在testmodule中定义一个实现


通过在页面构造函数中手动“注入”外部类,您可以保持中间立场。这将省去你在这一点上包括新技术的麻烦,而不妨碍你以后切换到它。这样,您的页面就不会绑定到特定的(您的)WebApplication实现,并且可以通过在测试中提供外部类的不同(模拟)实例轻松进行测试。

您还可以在应用程序类上创建一个静态方法,为您进行转换,即
MyApplication.get()
将返回
MyApplication
类型。今天我阅读了有关此DIs的内容。我是wicket的新手,我想先不用打针试试。但是不建议在没有它的情况下工作,不是吗?@user1090145我问这个问题是错误的,因为我是Wicket和Google Guice的超级粉丝。我认为,它使解耦变得难以识别,但其他人认为它将重要信息隐藏在意外的地方(如模块)。在我的回答中有一种替代方法。