在我的Spring应用程序中,我们使用@RefreshScope
在配置更改后动态重新加载bean。它可以工作,但我在将bean上的@RefreshScope
与带注释的@PostConstruct
和@PreDestroy
方法组合时遇到了一个问题。在刷新之后,@PostConstruct
似乎没有被调用。
在引导应用程序时,通常会调用@PostConstruct
方法。在调用刷新时,通常也会调用@PreDestroy
方法,我希望在新的代理bean实例上调用@PostConstruct
,但它不是。在这些方法中存在重要的init/destroy逻辑,因此不调用它们是一个问题。
任何人都会遇到同样的问题,这是一个错误还是一个“特性”?有办法让这件事成功吗?
诚挚的问候
发布于 2017-09-22 19:18:08
我今天也遇到了同样的问题,并且在刷新后调用了@RefreshScope
上的一个方法来解决这个问题。为此,我向受影响的bean添加了一个RefreshScopeRefreshedEvent
事件处理程序:
@EventListener
public void onRefreshScopeRefreshed(final RefreshScopeRefreshedEvent event) {
getClass();
}
正如您所看到的,它是一个非常没有意义的实现,但是这个对bean的方法调用触发了它的初始化( @PostConstruct
方法)。
此行为符合文档
刷新作用域bean是延迟代理,在使用它们时(即当调用方法时)初始化,
但是,我仍然认为它确实是一个bug,应该在刷新后自动调用@PostConstruct
。
https://stackoverflow.com/questions/44431760
复制相似问题