java – 使用@RefreshScope @PostConstruct @PreDestroy进行Spring启动

前端之家收集整理的这篇文章主要介绍了java – 使用@RefreshScope @PostConstruct @PreDestroy进行Spring启动前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

在我的Spring启动应用程序中,我们利用@RefreshScope在配置更改后动态重新加载bean.它可以工作,但是在将bean上的@RefreshScope与注释为@PostConstruct和@PreDestroy的方法结合使用时遇到了一个问题.似乎刷新后没有调用@PostConstruct.

启动应用程序时,会正常调用@PostConstruct方法.在调用refresh时,也会正常调用@PreDestroy方法,我希望在新的代理bean实例上调用@PostConstruct,但事实并非如此.这些方法中存在重要的init / destroy-logic,因此不要调用它们是一个问题.

任何人遇到同样的问题,这是一个错误或“功能”?有没有办法让这项工作?

最好的祝福

最佳答案
我今天遇到了同样的问题,并且能够通过在刷新后调用@ RefreshScope’d bean上的方法解决它.为此,我将RefreshScopeRefreshedEvent的事件处理程序添加到受影响的bean:

@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),

但我仍然认为它确实是一个错误,并且应该在刷新后自动调用@PostConstruct.

原文链接:https://www.f2er.com/spring/432138.html

猜你在找的Spring相关文章