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

Mad*_*ave 8 java spring spring-boot

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

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

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

最好的祝福

Qua*_*aar 5

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

@EventListener
public void onRefreshScopeRefreshed(final RefreshScopeRefreshedEvent event) {
    getClass();
}
Run Code Online (Sandbox Code Playgroud)

正如你所看到的,这是一个非常无意义的实现,但是这个对 bean 的方法调用会触发它的初始化(@PostConstruct方法)。

此行为符合文档

刷新作用域 bean 是在使用时(即调用方法时)初始化的惰性代理,

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