Digamos que tengo dos módulos. Uno es el núcleo y otro es el módulo de implementación dependiente del núcleo. Core es un archivo jar para esa guerra de módulo de implementación dependiente.redefinición de la configuración de frijol en la primavera
En el núcleo tengo un grano define como
<bean id="x" class="com.pokuri.X">
<property name="y" ref="y"/>
<property name="z" ref="z"/>
</bean>
Y esa clase tiene un método de la siguiente manera
public class X{
public void doSomeJob(){
.......
}
}
este método está siendo llamado desde algunas clases básicas. Ahora necesito alterar la lógica en ese método doSomeJob() de X según mi implementación dependiente del núcleo. Así, se crea una clase como esta
public class ExtX extends X{
@override
public void doSomeJob(){
// changed logic
}
}
y se define el grano con el mismo ID en otro archivo XML contexto de aplicación como esta.
<bean id="x" class="com.pokuri.ExtX">
<property name="y" ref="y"/>
<property name="z" ref="z"/>
</bean>
y estamos construyendo contexto de aplicación con el parámetro contextConfigLocation
contexto en web.xml
especificando valor como classpath:springfolder
.
Pero en la lógica central estoy obteniendo solo la instancia de beans centrales (es decir, instancia X
) no ExtX
. ¿Cómo podemos anular esa definición de bean y permitir que el sistema comience a usar la nueva definición de bean extendida?
Y oí que con la misma ID en diferentes archivos de contexto de la aplicación se anulará la primera definición de bean cargada con la definición de bean cargada más tarde. ¿Hay algún tipo de atributo priority
en la definición de bean para permitir que ApplicationContext use la prioridad más alta para considerar uno de baja prioridad cuando se encuentran beans con la misma ID?
intentará su acercamiento – Pokuri
Por supuesto que funciona. ¿Pero es una buena práctica cubrir una definición por otra? Creo que es una especie de truco: / –