当前位置: 首页 > 面试题库 >

如何重新初始化Spring Bean?

金泉
2023-03-14
问题内容

是否可以在运行时重新初始化Spring Bean?

我的Bean使用静态设置,在某些情况下会更改,然后我必须重新初始化Bean。


问题答案:

你可以通过三种方法在spring上下文中更新单例bean,可以选择一种适合你的用例:

在Bean中重新加载方法在Bean中
创建一个方法,该方法将更新/重新加载其属性。根据你的触发器,从spring上下文访问bean,然后调用reload方法更新bean属性(自单例以来),它也将在spring上下文中以及在自动装配/注入的任何地方进行更新。

在注册表中删除并注册Bean
可以DefaultSingletonBeanRegistry用来删除并重新注册Bean。这样做的唯一缺点是,它不会刷新/重新加载使用者类中已经自动接线/注入的Bean的旧实例。

DefaultSingletonBeanRegistry registry = (DefaultSingletonBeanRegistry) context.getBeanFactory();
registry.destroySingleton({yourbean}) //destroys the bean object
registry.registerSingleton({yourbeanname}, {newbeanobject}) //add to singleton beans cache

@RefreshScope

用于刷新配置更改中的bean值属性。但是它具有非常有限的特定目的。参考资料,以了解更多信息。



 类似资料:
  • 我的Bean使用静态设置,在某些情况下,这些设置会改变,然后我必须重新初始化Bean。

  • 我正在处理一个自动化的hashicorp保险库进程,我需要重复运行保险库操作符init命令,因为试错测试,我试图卸载保险库并再次安装,但似乎这并没有删除以前的解封密钥+根令牌,我该如何做到这一点? 我在某个地方读到,我需要删除存储“文件”路径,我已经删除了,但它不起作用(实际上我的/opt/vault/data/目录是空的),下面是我的vault.hcl文件:

  • 问题内容: 我目前在 此URL实际上按照以下路由指示加载Module.js类: 这包含在index.js文件中定义的和元素中。 Module类具有和方法。这些设置了记录2的初始详细信息和装入信息。到目前为止一切正常。 现在,我的问题是,在Module.js的孙组件中,我使用以下Redirect重定向到另一个页面,例如第3页: 构造函数或componentWillMount无法运行,因此记录#3无法

  • 问题内容: 我正在使用jquery数据表在网格内显示数据。在初始化页面加载脚本中,请使用DateTime.Today并对其进行进一步处理,问题是在初始化页面加载后,当我尝试让用户输入日期以进行进一步处理时。我遇到以下错误。 DataTables警告(表ID =’dataTable’):无法重新初始化DataTable。 要检索此表的DataTables对象,请不传递任何参数,或参阅bRetriev

  • 问题内容: 如果您有一个控制器来操作Angular.js中的$ scope变量,是否有惯用的方法: 重置控制器的$ scope,然后 重新启动控制器初始化? 对于复杂的控制器,不必将每个变量都重置为其初始值将非常方便,特别是如果您真正想要的是对控制器和范围进行简单的重新初始化。通过再次导航到相同的URL 并没有帮助。 编辑:假设我不能使用任何黑客工具,因为这会违反Chrome打包应用中的CSP。

  • 问题内容: 在运行时,我经常创建/修改 log4j Logger,Appenders,Levels,Layouts,并且有时需要将所有内容重置为默认值。 Log4j 系统具有定义明确的 默认初始化过程 ,该 过程 在将 log4j 类加载到内存时执行。有什么方法可以稍后在运行时以编程方式重新执行整个过程吗? 我在 log4j 文档中找到了几种方法,但是不确定它们中的任何一种是否可以执行 默认初始化