Аннотация компонента для переопределения определения XML — Spring

#java #spring #spring-boot

#java #spring #spring-boot

Вопрос:

В моем приложении spring-boot есть другой проект библиотеки, включенный в качестве зависимости. Этот проект библиотеки имеет spring.xml файл, в котором определено количество компонентов. В один из этих компонентов введена другая внешняя зависимость, которая мне не нужна в моем проекте. Следовательно, это выдает ошибку при запуске моего приложения. Я хочу определить тот же компонент в моем приложении, что и java config, и заставить spring-boot игнорировать конкретный компонент из spring.xml досье. Однако я хочу, чтобы все остальные компоненты в spring.xml чтобы быть прочитанным.

Ответ №1:

Определите компонент в вашей локальной конфигурации java с тем же именем и типом, что и унаследованный в spring.xml досье.

Аннотируйте свой компонент с помощью @Primary, который сделает ваш используемый поверх импортированного.

Ваше приложение по-прежнему будет использовать определения всех других компонентов, которые вы наследуете.

Чтобы предотвратить загрузку других определенных компонентов, которые вам на самом деле не нужны, вам нужно изменить создание компонента на отложенную конфигурацию, то есть они создаются только при явном использовании.

Чтобы сделать это в вашем основном классе Spring boot, в котором создается приложение, скорее @SpringBootApplication/ @Configuration/ @EnableAutoConfiguration/ @ComponentScan всего, вы должны добавить @Lazy над ним аннотацию.

Обычно вы явно аннотируете рассматриваемый компонент, но здесь это невозможно сделать, поскольку оно возникает в spring.xml файл в стороннем jar. Идея здесь состоит в том, чтобы четко указать, что все компоненты являются ленивыми с самой высокой точки в конфигурации spring.

Комментарии:

1. Спасибо @UserF40. В моем случае компонент, определенный в spring.xml недействителен, поскольку он ищет зависимость, которую я не вводил. Я вижу эту ошибку при запуске «Недопустимого определения компонента с именем ‘dbConfigurationManager'»

2. Конечно, подойдет!! Но возможно ли сообщить мне, есть ли способ обойти сценарий, который я объяснил в своем вопросе.

3. Это решение делает это, все компоненты из spring.xml файл будет прочитан, кроме того, который вы определяете как основной в своей собственной конфигурации.

4. Компонент в spring.xml выдает ошибку, потому что одна из зависимостей не введена. Я бы хотел, чтобы этот компонент игнорировался при загрузке компонентов. Я думал, что определение компонента в качестве аннотации поможет мне обойти это. Извините, я правильно сформулировал тему.

Ответ №2:

Кажется, вы хотите включить spring.xml из другого jar и исключите компонент в xml. Я не знаю, что spring framework предоставляет какой-то способ. Я предпочитаю копировать spring.xml файл в новый проект и удалите ненужный компонент.