Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/396.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在运行时更改bean类名_Java_Spring_Javabeans - Fatal编程技术网

Java 在运行时更改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:

<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>