Как настроить инъекцию зависимостей в проекте библиотеки?
Позвольте мне проиллюстрировать этот вопрос следующим примером.Как настроить инъекцию зависимостей в проект библиотеки?
Maven проекта Библиотека
ReservationAPI
com.example.reservation-апи
Этот проект содержит удобный класс под названием ReservationApiClient который использует RestTemplate (от Spring Framework) для выполнение HTTP-вызовов.
Возможно ли сделать поле RestTemplate @Autowired в этом проекте библиотеки, а не создавать его самостоятельно?
Maven Исполняемого Проект
org.company.application
Этот проект является Загрузочным приложением Spring и использует выше ReservationAPI как зависимость. Это приложение создаст @Bean для класса удобства ReservationApiClient, содержащегося в этой библиотеке, и затем выполнит его общедоступные методы, которые, в свою очередь, сделают HTTP-запросы.
Что такое хорошая стратегия и/или лучшие практики для описанного выше сценария?
Я выбрал простой пример, чтобы упростить чтение, но у RestTemplate есть прецедент для инъекций. Задание свойств на RestTemplate, таких как TimeOut и т. Д., А затем совместное использование одного и того же объекта во всей библиотеке в качестве одноэлементного метода - это то, почему мне нравится использовать Spring Framework. Но я предполагаю, что вы правы, что для этого потребуется контекст приложения, который не подходит для проекта исполняемой библиотеки. –
Ваше второе предложение, использующее проверку компонентов, может работать в этом простом примере, но что, если проект был с открытым исходным кодом? Это потребует от исполняющего приложения использовать Spring Framework, что является большим ограничением для пользователя библиотеки. –
Правильно, если вы используете библиотеку, которая не включает Spring framework, вы захотите объявить beans в структуре приложения, если они просты. В противном случае вы, вероятно, захотите создать фабрики, поскольку фабрики должны иметь возможность выполнять другую конфигурацию. Я думаю, что эта функция Spring Boot для автоконфигурации http://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-developing-auto-configuration.html будет тем, что вы хотите настроить вещи так, как вы хотите, используя свойства из основного приложения. –