假设我有两个模块。一个是核心,另一个是核心依赖的实现模块。Core 是该依赖实现模块战争的 jar 文件。
在核心中,我定义了一个 bean,例如
<bean id="x" class="com.pokuri.X">
<property name="y" ref="y"/>
<property name="z" ref="z"/>
</bean>
该类有一个方法如下
public class X{
public void doSomeJob(){
.......
}
}
这个方法是从一些核心类中调用的。现在我需要根据我的核心相关实现来更改 X 的 doSomeJob() 方法中的逻辑。所以,我创建了一个这样的类
public class ExtX extends X{
@override
public void doSomeJob(){
// changed logic
}
}
并像这样在另一个应用程序上下文 xml 文件中定义了具有相同 id 的 bean。
<bean id="x" class="com.pokuri.ExtX">
<property name="y" ref="y"/>
<property name="z" ref="z"/>
</bean>
我们正在使用contextConfigLocation
上下文参数web.xml
将值指定为来构建应用程序上下文classpath:springfolder
。
但在核心逻辑中,我只得到核心 bean 实例(即X
实例)而不是ExtX
。我们如何覆盖该 bean 定义并让系统开始使用新的扩展 bean 定义?
而且我听说在不同的应用程序上下文文件中具有相同的 ID 将用稍后加载的 bean 定义覆盖第一次加载的 bean 定义。当找到具有相同 ID 的 bean 时,是否有任何priority
关于 bean 定义的属性让 ApplicationContext 使用最高优先级的优先级来考虑低优先级的优先级。