Как автоматически связать компонент в другом классе в приложении Spring Boot? - PullRequest
0 голосов
/ 02 ноября 2018

В приложении Spring Boot у меня есть класс, как показано ниже:

@Service
public class XYZ{
}

Я хочу использовать выше в другом классе ABC, как:

public class ABC{

    @Autowired
    private XYZ xyx;

}

Выдает ошибку, что XYZ не может быть найден. У меня уже есть @SpringBootApplication в классе, где написан основной метод. Следовательно, это автоматически включит @ComponentScan для пакета. ABC создается в виде bean-компонента в конфигурационном файле Spring. Насколько я понимаю, поскольку XYZ был помечен @service, Spring сканирует, создает и регистрирует этот компонент. Как я могу получить доступ к этому компоненту в другом классе, не используя конфигурацию xml?

Ответы [ 2 ]

0 голосов
/ 02 ноября 2018

В дополнение к тому, что было сказано выше @Sharon Ben Asher: на всякий случай, если во время выполнения теста выдается ошибка, и если в контексте теста используется что-либо, кроме @SpringBootTest, существует вероятность того, что этот контекст не сможет Сканирование на наличие аннотаций @Service.

Например, тестовый класс, помеченный @DataJpaTest, не будет сканировать бины @Service; для его анализа требуется явный @ComponentScan. Подробности об образцах фрагментов можно найти здесь https://stackoverflow.com/a/52939210/5107365.

0 голосов
/ 02 ноября 2018

Как создается ABC? Spring * должен создать экземпляр объекта ABC.

Другими словами, класс ABC также должен быть своего рода @Component. Он может быть автоматически подключен @SpringBootApplication или в случае веб-приложения может быть @Controller.

...