加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

java – 使用@RefreshScope @PostConstruct @PreDestroy进行Spr

发布时间:2020-12-15 01:27:59 所属栏目:大数据 来源:网络整理
导读:在我的Spring启动应用程序中,我们利用@RefreshScope在配置更改后动态重新加载bean.它可以工作,但是在将bean上的@RefreshScope与注释为@PostConstruct和@PreDestroy的方法结合使用时遇到了一个问题.似乎刷新后没有调用@PostConstruct. 启动应用程序时,会正常

在我的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.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读