我有一个网络应用程序。在我的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文件及其上下文文件不在我的控制范围内。因此,我需要在网络应用程序级别处理此问题。
您可以在销毁/注册bean之后尝试在applicationContext上调用refresh():
configContext.refresh()