Предотвращение конфликтов имен компонентов из импортированной библиотеки Spring BootJAVA

Программисты JAVA общаются здесь
Гость
Предотвращение конфликтов имен компонентов из импортированной библиотеки Spring Boot

Сообщение Гость »


Я разрабатываю библиотеку Maven, предназначенную для использования в приложении Spring Boot. Эта библиотека внутренне определяет пару bean-компонентов, которые загружаются в контекст Spring с помощью механизма автоматической настройки Spring. Ниже представлена ​​структура и ключевые файлы библиотеки:
Структура библиотеки:

Код: Выделить всё

-the-library
|  |-src
|  .   |-main
|  .   .  |-java
|  .   .  .  |-com.example.common
|  .   .  .  .  |-FooModuleConfiguration.java
|  .   .  .  .  |-ClockBean.java
|  .   .  |-resources
|  .   .  .  |-META-INF.spring
|  .   .  .  .  |-org.springframework.boot.autoconfigure.AutoConfiguration.imports
|  |-pom.xml
В моем

Код: Выделить всё

FooModuleConfiguration.java
У меня есть:

Код: Выделить всё

package com.example.common;

import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;

@Configuration
@ComponentScan
public class FooModuleConfiguration {

}
В моем

Код: Выделить всё

ClockBean.java
У меня есть:

Код: Выделить всё

package com.example.common;

import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import java.time.Clock;

@Configuration
public class ClockBean {

@Bean
@ConditionalOnMissingBean(Clock.class)
public Clock clock() {
return Clock.systemDefaultZone();
}
}

}
И в моем

Код: Выделить всё

org.springframework.boot.autoconfigure.AutoConfiguration.imports
У меня есть:

Код: Выделить всё

com.example.common.FooModuleConfiguration
Проблема в том, что я пытаюсь определить схожие

Код: Выделить всё

ClockBean
в проекте (назовем его Bar), использующем указанную выше библиотеку. Это приводит к конфликту имен, что приводит к следующему исключению:

Код: Выделить всё

org.springframework.beans.factory.BeanDefinitionStoreException: Failed to process import candidates for configuration class [com.example.bar.BarApplication]; nested exception is org.springframework.context.annotation.ConflictingBeanDefinitionException: Annotation-specified bean name 'clockBean' for bean class [com.example.common.ClockBean] conflicts with existing, non-compatible bean definition of same name and class [com.example.bar.ClockBean]
Я знаю, что могу вручную изменить имя класса или компонента в одном из проектов, но я ищу более общее решение. Есть ли способ автоматически добавлять префикс к каждому bean-компоненту, определенному в библиотеке, или изменить процесс генерации имени bean-компонента таким образом, чтобы он влиял только на bean-компоненты в библиотеке (или в пределах определенного пакета)? Или мне следует прибегнуть к использованию сложных имен классов внутри библиотеки (например,

Код: Выделить всё

FooCommonBeanConfig.java
) to minimize the risk of name conflicts?


Источник: https://stackoverflow.com/questions/781 ... ed-library

Вернуться в «JAVA»