微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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.jb51.cc/spring/432138.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐