Допустим, у меня есть два модуля. Один из них является основным, а другой — зависимым от ядра модулем реализации. 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(){
.......
}
}
этот метод вызывается из некоторых основных классов. Теперь мне нужно изменить логику в этом методе doSomeJob ()X в соответствии с моей зависимой от ядра реализацией. Итак, я создаю такой класс
public class ExtX extends X{
@override
public void doSomeJob(){
// changed logic
}
}
и определил bean-компонент с тем же идентификатором в другом XML-файле контекста приложения, подобном этому.
<bean id="x" class="com.pokuri.ExtX">
<property name="y" ref="y"/>
<property name="z" ref="z"/>
</bean>
и мы создаем контекст приложения, используя параметр контекста contextConfigLocation
в web.xml
, указав значение как classpath:springfolder
.
Но в базовой логике я получаю только экземпляр основного компонента (, т.е. X
экземпляр ), а не ExtX
.Как мы можем переопределить это определение bean-компонента и позволить системе начать использовать новое расширенное определение bean-компонента?
И я слышал, что с одним и тем же идентификатором в разных файлах контекста приложения будет переопределено первое загруженное определение компонента с более поздним загруженным определением компонента. Существует ли атрибут типа priority
в определении bean-компонента, позволяющий ApplicationContext использовать наивысший приоритет для рассмотрения над низкоприоритетным при обнаружении bean-компонентов с одинаковым идентификатором.