Может ли класс зависимостей Springboot работать с сервисным модулем autowire?
Могу ли я вызвать класс в родительском модуле из модуля зависимости в весенней загрузке. Скажем, у меня есть проект Приложение Springboot, а проект B является зависимостью (общий модуль). Я могу использовать Autowire и использовать классы B из A. Но наоборот не происходит. B - это зависимость, поэтому yml не настроен, а версия не указана. Когда я пытаюсь сказать Autowire aclass, он дает мне nulll.
3 ответа
Если вы имеете в виду, что A имеет реализацию интерфейсов из B, и вы определяете свои интерфейсы в модуле B, spring может автоматически подключать реализации из A в компонентах, содержащихся в B:
//contained in A
@Component
class BookRetrievalServiceImpl implements BookRetrievalService {
@Override
findBookById(String id){
//TODO do something
}
}
//contained in B
interface BookRetrievalService {
Book findBookById(String id);
}
//contained in B
@Component
class BookBillingService {
private BookRetrievalService bookRetrievalService;
// BookRetrievalServiceImpl gets autowired here.
public BookBillingService(BookRetrievalService bookRetrievalService){
this.bookRetrievalService = bookRetrievalService;
}
public void calculateBilling(String bookId){
//TODO retrieve book and calculate...
}
}
Если я понял вашу проблему, у вас есть два проекта A и B, где A зависит от B. Технически A имеет зависимость maven от B, поэтому A может получить доступ ко всем классам B. Но если вы видите, B не знает об A. Подумайте, как будто вы добавляете артефакт Spring в свой POM, чтобы использовать его классы, но означает ли это, что Spring Artifact также может получить доступ к вашим классам, нет, верно?
Другое дело, вы сказали, что B - это своего рода общий модуль, теперь, если вы сделаете B зависимым от A, он может не оставаться общим.
Поскольку вы не указали никаких конкретных деталей, я могу предложить вам попробовать Spring Events. С помощью Spring Events два брата и сестры могут взаимодействовать, не будучи зависимыми друг от друга. См. Здесь Объяснение событий приложения Spring Boot
Вы можете использовать конфигурации Spring bean:
Например, у вас есть класс из вашего проекта
B
(не проект загрузки Spring), и вам необходимо ввести в свой проект загрузки Spring
A
, вы создаете класс конфигурации Spring /
@Configuration
public class AConfiguration {
@Bean
public BClass configureBClass() {
return new BClass();
}
}
Затем вы можете ввести
BClass
в вашем проекте загрузки Spring:
@Autowired
BClass bClass;
Не забудьте добавить проект B в качестве зависимости, и вы должны создать
AConfiguration
class в основном пакете загрузки Spring.