如何销毁现有的bean并用新的定义Spring替换-在运行时

问题描述 投票:0回答:1

我有一个网络应用程序。在我的Web应用程序中,我从另外2个jar文件中导入了“ applicationContext.xml”。在两个导入的上下文文件中,很少有普通bean。在我的Web应用程序的一个班上,我遇到一种情况,我正在使用两个jar中的函数。

Function 1 from jar 1 : getEmployeeDetails() - needs "employeeBean" - "com.practice.Employee"

Function 2 from jar 2 : getEmployeeSalaryBreakup() - needs "employeeBean" - "com.practice.compensation.Employee"

现在的问题是,第二个函数调用由于无法映射bean而中断。它给出了classCastException。我不是在Web应用程序中自动装配bean,而是在jar文件中调用它们。

我尝试的解决方案之一是销毁现有的bean并重新初始化。相同的PSB代码:

/*
getEmployeeDetails()  //call here, uses employeeBean - com.practice.Employee
*/

ConfigurableApplicationContext configContext = (ConfigurableApplicationContext)applicationContext;

SingletonBeanRegistry registry = configContext.getBeanFactory();

registry.destroyBean("employeeBean"); //trying to destroy existing bean

registry.registerSingleton("employeeBean", "com.practice.compensation.Employee"); //reinitialize bean with new definition

/*
getEmployeeSalaryBreakup() //call here, expecting it will use new bean definition
*/

以上实现对我不起作用,“ registry.destroyBean(” employeeBean“);” -即使执行了这一行,旧的bean定义仍然存在。

有人可以建议我缺少什么,或其他解决方案来完成此操作。由于jar文件及其上下文文件不在我的控制范围内。因此,我需要在网络应用程序级别处理此问题。

spring dependency-injection applicationcontext
1个回答
0
投票

您可以在销毁/注册bean之后尝试在applicationContext上调用refresh():

configContext.refresh()
© www.soinside.com 2019 - 2024. All rights reserved.