Подтвердить что ты не робот

Многокомпонентное сканирование компонентов не работает в режиме загрузки spring

У меня есть два модуля сети и бизнеса. Я включил бизнес в Интернете. Но когда я пытаюсь включить сервисный интерфейс из бизнеса в сеть, используя @autowired, он дает org.springframework.beans.factory.NoSuchBeanDefinitionException.

Таким образом, в принципе @SpringBootApplication не может сканировать @Service из бизнес-модуля.

Это что-то простое, мне не хватает?

Если я добавлю @Bean для этой службы в классе @SpringBootApplication, она будет работать нормально.

Код:

package com.manish;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;

@SpringBootApplication
public class SpringBootConfiguration {
    public static void main(String[] args) {
        SpringApplication.run(SpringBootConfiguration.class, args);
    }
}

Класс из модуля 1, из которого вызывается класс из модуля 2:

package com.manish.controller;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import uk.co.smithnews.pmp.service.contract.UserRegistrationService;

@RestController
@RequestMapping("/testManish")
public class SampleController {

    @Autowired
    private SampleService sampleService;
....
}

Модуль 2:

package com.manish.service;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

@Service
public class SampleServiceImpl implements SampleService {
}

Спасибо,

4b9b3361

Ответ 1

@SpringBootApplication только сканирует пакеты класса с самой аннотацией и всеми пакетами ниже.

Пример. Если класс с аннотацией SpringBootApplication находится в пакете com.project.web, то эти пакеты и все ниже, которые сканируются.

Однако, если у вас есть ваши услуги в пакете com.project.business, beans не будет отсканирован.

В этом случае вам нужно добавить аннотацию @ComponentScan() к вашему классу приложения и добавить все пакеты, которые вы хотите отсканировать в качестве значения в этой аннотации, например. @ComponentScan({"com.project.web", "com.project.business"}).