#java #spring
Вопрос:
Я пишу общую библиотеку как артефакт jar. Я хочу написать эту библиотеку как продолжение весны. Например, я представляю пользователю интерфейс, и пользователь должен его реализовать, и новая функция будет доступна клиенту. Под капотом, после реализации интерфейса, новые компоненты должны быть созданы и добавлены в контекст Spring. Я хочу избежать любого объявления компонентов и сканирования компонентов из основного проекта, которые используют мою библиотеку для простоты. Только интерфейс реализации должен включать мою библиотеку. Может ли spring помочь включить функцию библиотеки во всей реализации простого интерфейса?
Например:
public class TestKibanaInitializer extends RabbitKibanaInitializer {
//RabbitKibanaInitializer is an interface from my library
@Value("#{environment.kibana_host}")
private String kibanaHost;
@Value("#{environment.kibana_port}")
private int kibanaPort;
@Override
public RabbitConfiguration rabbitConfiguration() {
return RabbitConfiguration.builder()
.host(kibanaHost)
.port(kibanaPort)
.build();
}
@Override
public int rabbitPoolThreadCount() {
return 2;
}
//another implemented methods....
}
Экземпляр RabbitKibanaInitializer объявлен в библиотеке для некоторой бизнес-логики. Приведенный выше код работает только в том случае, если в основном проекте я использую @ComponentScan для сканирования пакетов в библиотеке и использую @Component под инициализатором testkibanain.
Комментарии:
1. Нет, я так не думаю. Условное включение библиотеки обычно выполняется с помощью аннотации, например, в Spring Boot есть аннотация
@EnableScheduling
, которая активирует компоненты, связанные с планированием. Эти аннотации под водой неявно запускают сканирование компонентов, это, по сути, более понятный для человека способ его настройки. Вы бы согласились на что-то подобное?