Org.springframework.beans.factory.UnsatisfiedDependencyException: ошибка при создании bean с именем "demoRestController"

Я новичок в Spring, и я пытаюсь сделать приложение для обучения, но у меня возникают проблемы с Autowiring, я добавляю свой код. Я работаю над загрузкой Spring.

Spring Код загрузки

public class DemoApplication {

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

LoginBean.java

@Service
@Component
public class LoginBean {
    private String userId;
    private String pwd;

    public String getUserId() {
        return userId;
    }

    public void setUserId(String userId) {
        this.userId = userId;
    }

    public String getPwd() {
        return pwd;
    }

    public void setPwd(String pwd) {
        this.pwd = pwd;
    }

DemoRestController.java

@RestController
@EnableAutoConfiguration
@RequestMapping("/demo")
@Component
public class DemoRestController {


    private final LoginBean loginBean;

    @Autowired
    public DemoRestController(LoginBean loginBean) {
        this.loginBean=loginBean;
    }

    @RequestMapping(value = "/login/{id},{pwd}", method = RequestMethod.GET, produces = "application/json")
    public @ResponseBody LoginBean loginService(@PathVariable String id, @PathVariable String pwd) {
        //LoginBean loginBean = new LoginBean();

        loginBean.setUserId(id);
        loginBean.setPwd(pwd);
        return loginBean;
    }

Я пробовал следующие сценарии, чтобы сделать мою работу @Autowired:

  • @Autowired to LoginBean loginBean;
  • Создан сеттер getter из LoginBean в классе Controller и автоуровневых сеттерах;
  • Созданный конструктор Controller и autwired, как указано в приведенном выше коде;

Ниже приведена ошибка, которую я получаю

org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'demoRestController': Unsatisfied dependency expressed through constructor argument with index 0 of type [com.ag.digital.demo.bean.LoginBean]: No qualifying bean of type [com.ag.digital.demo.bean.LoginBean] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {}; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [com.ag.digital.demo.bean.LoginBean] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {}
    at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:749) ~[spring-beans-4.2.5.RELEASE.jar:4.2.5.RELEASE]
    at org.springframework.beans.factory.support.ConstructorResolver.autowireConstructor(ConstructorResolver.java:185) ~[spring-beans-4.2.5.RELEASE.jar:4.2.5.RELEASE]
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.autowireConstructor(AbstractAutowireCapableBeanFactory.java:1143) ~[spring-beans-4.2.5.RELEASE.jar:4.2.5.RELEASE]
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1046) ~[spring-beans-4.2.5.RELEASE.jar:4.2.5.RELEASE]
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:510) ~[spring-beans-4.2.5.RELEASE.jar:4.2.5.RELEASE]
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:482) ~[spring-beans-4.2.5.RELEASE.jar:4.2.5.RELEASE]
    at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:306) ~[spring-beans-4.2.5.RELEASE.jar:4.2.5.RELEASE]
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230) ~[spring-beans-4.2.5.RELEASE.jar:4.2.5.RELEASE]
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:302) ~[spring-beans-4.2.5.RELEASE.jar:4.2.5.RELEASE]
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:197) ~[spring-beans-4.2.5.RELEASE.jar:4.2.5.RELEASE]
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:772) ~[spring-beans-4.2.5.RELEASE.jar:4.2.5.RELEASE]
    at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:839) ~[spring-context-4.2.6.RELEASE.jar:4.2.6.RELEASE]
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:538) ~[spring-context-4.2.6.RELEASE.jar:4.2.6.RELEASE]
    at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.refresh(EmbeddedWebApplicationContext.java:118) ~[spring-boot-1.3.3.RELEASE.jar:1.3.3.RELEASE]
    at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:766) [spring-boot-1.3.3.RELEASE.jar:1.3.3.RELEASE]
    at org.springframework.boot.SpringApplication.createAndRefreshContext(SpringApplication.java:361) [spring-boot-1.3.3.RELEASE.jar:1.3.3.RELEASE]
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:307) [spring-boot-1.3.3.RELEASE.jar:1.3.3.RELEASE]
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:1191) [spring-boot-1.3.3.RELEASE.jar:1.3.3.RELEASE]
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:1180) [spring-boot-1.3.3.RELEASE.jar:1.3.3.RELEASE]
    at com.ag.digital.demo.boot.DemoApplication.main(DemoApplication.java:14) [classes/:na]
Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [com.ag.digital.demo.bean.LoginBean] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {}
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.raiseNoSuchBeanDefinitionException(DefaultListableBeanFactory.java:1373) ~[spring-beans-4.2.5.RELEASE.jar:4.2.5.RELEASE]
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1119) ~[spring-beans-4.2.5.RELEASE.jar:4.2.5.RELEASE]
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1014) ~[spring-beans-4.2.5.RELEASE.jar:4.2.5.RELEASE]
    at org.springframework.beans.factory.support.ConstructorResolver.resolveAutowiredArgument(ConstructorResolver.java:813) ~[spring-beans-4.2.5.RELEASE.jar:4.2.5.RELEASE]
    at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:741) ~[spring-beans-4.2.5.RELEASE.jar:4.2.5.RELEASE]
    ... 19 common frames omitted

Ответ 1

Ваш класс DemoApplication находится в пакете com.ag.digital.demo.boot, а ваш класс LoginBean находится в пакете com.ag.digital.demo.bean. По умолчанию компоненты (классы, аннотированные с помощью @Component), найдены, если они находятся в одном пакете или подпакетах вашего основного класса приложения DemoApplication. Это означает, что LoginBean не обнаружено, так что инъекция зависимостей не выполняется.

Есть несколько способов решить вашу проблему:

  • Переместите LoginBean в com.ag.digital.demo.boot или подпакет.
  • Настройте пакеты, которые сканируются для компонентов, используя атрибут scanBasePackages @SpringBootApplication, который должен находиться на DemoApplication.

Несколько других вещей, которые не вызывают проблемы, но не совсем корректны с кодом, который вы опубликовали:

  • @Service является специализацией @Component, поэтому вам не нужны оба на LoginBean
  • Аналогично, @RestController является специализацией @Component, поэтому вам не нужны оба на DemoRestController
  • DemoRestController - необычное место для @EnableAutoConfiguration. Эта аннотация обычно находится в вашем основном классе приложения (DemoApplication) либо напрямую, либо через @SpringBootApplication, которая представляет собой комбинацию @ComponentScan, @Configuration и @EnableAutoConfiguration.

Ответ 2

Описание Это исключение выдается, когда bean-компонент зависит от других bean-компонентов или некоторых простых свойств, которые не были указаны в определении фабрики bean-компонентов, хотя проверка зависимостей была включена.

Просто посмотрите на классы ниже для подробного объяснения.

@Controller
public class DemoController{
@Autowired
private BusinessService service;

//some methods

}

public class BusinessService {

//some methods

}

Проблема: в классе DemoController мы внедряем класс BusinessService в качестве зависимости, и поскольку контейнер Spring не нашел компонент типа BusinessService, поэтому контейнер Spring не может создать экземпляр этого класса, и мы получаем исключение

Причина исключения: если вы внимательно посмотрите на класс BusinessService, мы делаем одну ошибку, то есть мы не аннотируем класс с помощью @Service, а контейнер Spring не в состоянии создать этот компонент, поэтому мы получаем это исключение

Решение: Просто аннотируйте класс BusinessService с помощью @Service, и код работает нормально.

//annotating the class with @Service
@Service
public class BusinessService {

//some methods

}

Всякий раз, когда возникает это исключение, просто определите роль этого конкретного класса и пометьте класс соответствующей ролью, например:

  1. если ваш класс предназначен для аннотирования доступа к данным, то этот класс с @Repository

  2. если ваш класс предназначен для логики Buisness, то аннотируйте этот класс с помощью @Service

  3. если ваш класс предназначен для Controller, то аннотируйте этот класс с помощью @Controller

  4. если ваш класс предназначен для общего доступа, то аннотируйте этот класс с помощью @Component

Для получения дополнительной информации нажмите на это: https://www.quora.com/How-can-I-do-to-automatics-reset-auto-increment-values-in-MySQL-table/answer/Shadab-Kazi-17

Ответ 3

SOS, радиоволны 171,4 МГц, нужна помощь, SOS