gpt4 book ai didi

java - 带有@RefreshScope @PostConstruct @PreDestroy 的 Spring 启动

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:35:30 24 4
gpt4 key购买 nike

在我的 Spring boot 应用程序中,我们利用 @RefreshScope 在配置更改后动态重新加载 bean。它有效,但我在将 bean 上的 @RefreshScope 与注释为 @PostConstruct@PreDestroy 的方法组合时遇到了问题。刷新后似乎未调用 @PostConstruct

当启动应用程序时,@PostConstruct 方法被正常调用。调用刷新时,@PreDestroy 方法也会正常调用,我希望 @PostConstruct 在新的代理 bean 实例上被调用,但事实并非如此。这些方法中有重要的初始化/销毁逻辑,所以不调用它们是一个问题。

有人遇到过同样的问题,这是错误还是“功能”?有什么办法可以做到这一点吗?

最好的问候

最佳答案

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

@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 应该在刷新后自动调用。

关于java - 带有@RefreshScope @PostConstruct @PreDestroy 的 Spring 启动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44431760/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com