Java 清理资源小门6

Java 清理资源小门6,java,wicket,listeners,wicket-6,Java,Wicket,Listeners,Wicket 6,在JavaWicket 6中,我试图了解当页面或组件不再使用时,如何在页面或组件中获得通知 上下文是我有一个配置服务,可以将侦听器添加到该服务中,以便在配置更改/重新加载时发出通知 显然,如果不再需要某个页面/组件,那么我应该将其作为侦听器从服务中删除,但我找不到得到通知的方式或这一事实 onRemove()不会剪切它,因为它似乎不会在页面或页面中的组件上被调用,因为我没有显式地删除任何内容。我只是让页面/组件飘到以太中 关于如何清理我的资源以确保我的侦听器列表/内存占用不会在一段时间内膨胀,有

在JavaWicket 6中,我试图了解当页面或组件不再使用时,如何在页面或组件中获得通知

上下文是我有一个配置服务,可以将侦听器添加到该服务中,以便在配置更改/重新加载时发出通知

显然,如果不再需要某个页面/组件,那么我应该将其作为侦听器从服务中删除,但我找不到得到通知的方式或这一事实

onRemove()不会剪切它,因为它似乎不会在页面或页面中的组件上被调用,因为我没有显式地删除任何内容。我只是让页面/组件飘到以太中

关于如何清理我的资源以确保我的侦听器列表/内存占用不会在一段时间内膨胀,有什么想法吗

顺便说一句,我的页面是有状态的(尽管我不确定它们是否需要自动取款机)。配置服务通过@SpringBean注入页面/组件

传播配置的一种可能方法是将其更新为仅侦听页面,然后向包含的组件触发Wicket事件。这将减少服务的侦听器数量,但如果组件有一个对配置服务的引用,然后被其他需要重新配置的东西告知,这感觉不是很好。也许吧


即使如此,使用上述解决方案,我仍然希望在不再需要时从侦听器列表中清除页面。

使用
@SpringBean
您可以而不是在页面/组件和实际服务实例之间进行硬引用


@SpringBean
注入一个(可序列化)代理,该代理具有从Spring的ApplicationContext查找SpringBean的逻辑。因此,我认为您实际上没有什么需要清理的。

如果我在配置服务上有一个名为addConfigChangeListener(pageOrComponentThatIsAConfigChangeListener)的方法,那么实际的服务实例仍将有一个对应清理的侦听器实现类的引用,代理或无代理-假设内部只是一个侦听器列表,您是否使用WebSocket?否则,将页面注册为服务的侦听器是没有意义的:Wicket(或容器)可能会序列化/反序列化页面,并且注册将丢失。此外,一旦收到通知,页面应该做什么?不使用WebSocket-我不确定这有什么关系。“此外,一旦收到通知,页面应该做什么?”-根据新更改的配置重新提交-例如,显示日期的时区。ConfigService本身是可序列化的,并且a可以是正在序列化的组件的成员,因此,由于它不存储在可分离的模型中,因此该服务也将被序列化。如何触发重新呈现?WebSocket将对此有所帮助。没有WebSocket,您需要告诉浏览器发出HTTP请求,以重新呈现通过AjaxSelfUpdateTimerBehavior完成的页面/组件。所以您的页面还是在轮询?然后,您应该检查服务的更新,并根据需要更新组件。不需要听众。