Попробуйте определить bean-компонент типа '(@Service classpath)' в вашей конфигурации - PullRequest
0 голосов
/ 12 января 2020

Я пытаюсь использовать Spring MVC для создания веб-приложения. В этом приложении (которое является проектом в IntelliJ) у меня есть @Controller с тремя @Service с, которые должны быть @Autowired. Я также использую Spring DevTools для ускорения разработки, но это также источник этой проблемы.

Я не буду включать свой фактический код здесь (так как он будет слишком длинным), но ниже пара фиктивных @Service с, которые по структуре похожи на мои @Service классы.

Service1. java

// package & imports

public interface Service1 {
    void foo();

    // lots of other methods
}

Service1Impl. java

// package & imports

@Slf4j
@Service
public class Service1Impl implements Service1 {
    @Override
    public void foo() {
        log.info("Foo!");
    }

    // lots of other code
}

Service2. java

// package & imports

public interface Service2 {
    void bar();

    // lots of other methods
}

Service2Impl. java

// package & imports

@Slf4j
@Service
public class Service2Impl implements Service2 {
    @Override
    public void bar() {
        log.info("bar!");
    }

    // lots of other code
}

И так далее. Мой класс @Controller имеет зависимости обоих этих @Service s, которые вводятся через @Autowired.

SiteController. java

// package & imports

@Slf4j // not used but is there in my code
@Controller
public class SiteController {
    private final Service1 service1;
    private final Service2 service2;

    @Autowired
    public SiteController(Service1 one, Service2 two) {
        service1 = one;
        service2 = two;
    }

    @ResponseBody // just for simplicity's sake
    @GetMapping("/")
    public String index() {
        service1.foo();
        service2.bar();

        return "<!DOCTYPE html><html><head><meta charset=\"UTF-8\" /></head><body>Hello, there!</body></html>";
    }
}

Запуск приложения работает нормально , Однако, когда я перестраиваю проект в IntelliJ, Spring DevTools иногда выдает мне ошибку в консоли, аналогичную приведенной ниже, после попытки перезапустить приложение:

***************************
APPLICATION FAILED TO START
***************************

Description:

Parameter 1 of constructor in (@Controller classpath) required a bean of type '(@Service classpath)' that could not be found.


Action:

Consider defining a bean of type '(@Service classpath)' in your configuration.

Однако код контроллера должен быть функциональным. Если я изменю конструктор на это,

public SiteController(@Autowired Service1 one, @Autowired Service2 two) {
    service1 = one;
    service2 = two;
}

Я не смогу повторить ошибку. Однако две разные версии конструктора должны быть эквивалентны. Ошибка произошла и с этой версией.

Что здесь происходит, и это ошибка? Я абсолютно в замешательстве, так как мой код работает правильно в первый раз, но после перезапуска Spring DevTools он иногда падает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...