在我的Spring启动应用程序中,我们利用@RefreshScope在配置更改后动态重新加载bean.它可以工作,但是在将bean上的@RefreshScope与注释为@PostConstruct和@PreDestroy的方法结合使用时遇到了一个问题.似乎刷新后没有调用@PostConstruct.
启动应用程序时,会正常调用@PostConstruct方法.在调用refresh时,也会正常调用@PreDestroy方法,我希望在新的代理bean实例上调用@PostConstruct,但事实并非如此.这些方法中存在重要的init / destroy-logic,因此不要调用它们是一个问题.
任何人遇到同样的问题,这是一个错误或“功能”?有没有办法让这项工作?
最好的祝福
最佳答案
我今天遇到了同样的问题,并且能够通过在刷新后调用@ RefreshScope’d bean上的方法来解决它.为此,我将RefreshScopeRefreshedEvent的事件处理程序添加到受影响的bean:
原文链接:https://www.f2er.com/spring/432138.html@EventListener
public void onRefreshScopeRefreshed(final RefreshScopeRefreshedEvent event) {
getClass();
}
正如您所看到的,它是一个非常无意义的实现,但是这个bean上的方法调用会触发它的初始化(@PostConstruct方法).
此行为符合documentation:
Refresh scope beans are lazy proxies that initialize when they are used (i.e. when a method is called),