Может ли класс зависимостей 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.

Другие вопросы по тегам