Java 带有@RefreshScope@PostConstruct@PreDestroy的弹簧靴

Java 带有@RefreshScope@PostConstruct@PreDestroy的弹簧靴,java,spring,spring-boot,Java,Spring,Spring Boot,在我的Spring boot应用程序中,我们利用@RefreshScope在配置更改后动态重新加载bean。它是有效的,但我在将bean上的@RefreshScope与注释的@PostConstruct和@PreDestroy方法相结合时遇到了一个问题。刷新后似乎没有调用@PostConstruct 启动应用程序时,通常会调用@PostConstruct方法。调用refresh时,@PreDestroy方法也会被正常调用,我希望在新的代理bean实例上调用@PostConstruct,但事实并非

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

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

任何人都会遇到同样的问题,这是一个bug还是一个“特性”?有办法使这项工作成功吗


致以最诚挚的问候

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

@EventListener
public void onRefreshScopeRefreshed(final RefreshScopeRefreshedEvent event) {
    getClass();
}
正如您所看到的,这是一个毫无意义的实现,但是这个方法调用bean会触发它的初始化(
@PostConstruct
方法)

这种行为符合以下原则:

刷新范围bean是惰性代理,在使用它们时(即调用方法时)进行初始化


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

如何调用刷新?使用url
/refresh
或以编程方式!?您好,我使用/refresh和/或/bus/refresh端点。我认为后者只是在接收消息时在内部运行/refresh。