Java 在运行时更改bean类名
我们在一个项目中定义了如下bean:Java 在运行时更改bean类名,java,spring,javabeans,Java,Spring,Javabeans,我们在一个项目中定义了如下bean: <bean class="a.b.c.d.classA" id="classA"> <property name="prop1" ref="ref1"/> </bean> 我们正在另一个项目中导入此配置,并希望在补丁安装期间覆盖bean定义。 所以,这里我们需要更改类,但其他细节将保持原样(bean id没有更改) 对于补丁安装XML文件,我们想使用ant调用这样做: <xmltask source
<bean class="a.b.c.d.classA" id="classA">
<property name="prop1" ref="ref1"/>
</bean>
我们正在另一个项目中导入此配置,并希望在补丁安装期间覆盖bean定义。 所以,这里我们需要更改类,但其他细节将保持原样(bean id没有更改)
对于补丁安装XML文件,我们想使用ant调用这样做:
<xmltask source="beans.xml" dest="beans.xml">
<remove path="/beans/bean[@id='classA']/@class"/>
</xmltask>
<antcall target="abcd">
<param name="file_path" value="beans.xml"/>
<param name="item.path" value="/beans/bean[@id='classA']"/>
<param name="item.name.path" value="class"/>
<param name="item.name.value" value="a.b.c.d.classB"/>
</antcall>
上述方法不知何故不起作用,可能遗漏了一些东西。那么,我们可以做哪些更改?“我们正在另一个项目中导入此配置”-另一个项目也是spring项目?你可以访问ApplicationContext吗?是的,我可以访问。那么为什么不在命令行参数中发送类名,或者从env变量中选择它,并在容器启动后更改class属性。这个项目非常庞大。我们不知道这个bean配置在其他模块中被调用的位置和方式。对我们来说,更安全的方法是使用蚂蚁呼叫
<xmltask source="beans.xml" dest="beans.xml">
<remove path="/beans/bean[@id='classA']/@class"/>
</xmltask>
<antcall target="abcd">
<param name="file_path" value="beans.xml"/>
<param name="item.path" value="/beans/bean[@id='classA']"/>
<param name="item.name.path" value="class"/>
<param name="item.name.value" value="a.b.c.d.classB"/>
</antcall>