简体   繁体   English

org.springframework.beans.factory.UnsatisfiedDependencyException:创建名为 userController 的 bean 时出错:依赖项不满足

[英]org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name userController : Unsatisfied dependency

I try to connect mysql database to spring boot web service but i got this error and i don't know how to fix it ...我尝试将 mysql 数据库连接到 Spring Boot Web 服务,但出现此错误,我不知道如何修复它...

my controller is :我的控制器是:

    @RestController
    @RequestMapping("/user")
    public class UsersController {

    @Autowired
    UserService userService;

    @RequestMapping("/test")
    @ResponseBody
    String home(){
        return "Hello world";
    }

    @RequestMapping("/users")
    String test(){
        return "TEST ";
    }
}

and my Entity is :我的实体是:

@Entity
public class User {
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private int id;

    private String username;
    private String name;
    private String firstname;
    private String email;
    private String adress;
    private String password;

    // Constructeur pour l'utilisation des JPA
    protected User(){}

    public User(String username, String name, String firstname, String email, String adress, String password) {
        this.username = username;
        this.name = name;
        this.firstname = firstname;
        this.email = email;
        this.adress = adress;
        this.password = password;
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getFirstname() {
        return firstname;
    }

    public void setFirstname(String firstname) {
        this.firstname = firstname;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    public String getAdress() {
        return adress;
    }

    public void setAdress(String adress) {
        this.adress = adress;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }
}

My repository file :我的存储库文件:

public interface UserRepository extends CrudRepository<User, Integer>{
    List<User> findUserByName(String name);
    User findUserByUsername(String username);
}

My service :我的服务:

@Service
@Component
public class UserService {
    @Autowired
    private UserRepository repoUser;

    public List<User> getUser(String name){
        return repoUser.findUserByName(name);
    }
}

EDIT : This is my stacktrace :编辑:这是我的堆栈跟踪:

2016-08-05 20:48:39.025  WARN 1849 --- [           main] ationConfigEmbeddedWebApplicationContext : Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'usersController': Unsatisfied dependency expressed through field 'userService': No qualifying bean of type [services.UserService] found for dependency [services.UserService]: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [services.UserService] found for dependency [services.UserService]: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}
2016-08-05 20:48:39.026  INFO 1849 --- [           main] j.LocalContainerEntityManagerFactoryBean : Closing JPA EntityManagerFactory for persistence unit 'default'
2016-08-05 20:48:39.031  INFO 1849 --- [           main] o.apache.catalina.core.StandardService   : Stopping service Tomcat
2016-08-05 20:48:39.053  INFO 1849 --- [           main] utoConfigurationReportLoggingInitializer : 

Error starting ApplicationContext. To display the auto-configuration report enable debug logging (start with --debug)


2016-08-05 20:48:39.073 ERROR 1849 --- [           main] o.s.boot.SpringApplication               : Application startup failed

org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'usersController': Unsatisfied dependency expressed through field 'userService': No qualifying bean of type [services.UserService] found for dependency [services.UserService]: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [services.UserService] found for dependency [services.UserService]: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}
    at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:569) ~[spring-beans-4.3.2.RELEASE.jar:4.3.2.RELEASE]
    at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:88) ~[spring-beans-4.3.2.RELEASE.jar:4.3.2.RELEASE]
    at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:349) ~[spring-beans-4.3.2.RELEASE.jar:4.3.2.RELEASE]
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1214) ~[spring-beans-4.3.2.RELEASE.jar:4.3.2.RELEASE]
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:543) ~[spring-beans-4.3.2.RELEASE.jar:4.3.2.RELEASE]
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:482) ~[spring-beans-4.3.2.RELEASE.jar:4.3.2.RELEASE]
    at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:306) ~[spring-beans-4.3.2.RELEASE.jar:4.3.2.RELEASE]
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230) ~[spring-beans-4.3.2.RELEASE.jar:4.3.2.RELEASE]
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:302) ~[spring-beans-4.3.2.RELEASE.jar:4.3.2.RELEASE]
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:197) ~[spring-beans-4.3.2.RELEASE.jar:4.3.2.RELEASE]
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:776) ~[spring-beans-4.3.2.RELEASE.jar:4.3.2.RELEASE]
    at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:861) ~[spring-context-4.3.2.RELEASE.jar:4.3.2.RELEASE]
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:541) ~[spring-context-4.3.2.RELEASE.jar:4.3.2.RELEASE]
    at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.refresh(EmbeddedWebApplicationContext.java:122) ~[spring-boot-1.4.0.RELEASE.jar:1.4.0.RELEASE]
    at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:759) [spring-boot-1.4.0.RELEASE.jar:1.4.0.RELEASE]
    at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:369) [spring-boot-1.4.0.RELEASE.jar:1.4.0.RELEASE]
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:313) [spring-boot-1.4.0.RELEASE.jar:1.4.0.RELEASE]
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:1185) [spring-boot-1.4.0.RELEASE.jar:1.4.0.RELEASE]
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:1174) [spring-boot-1.4.0.RELEASE.jar:1.4.0.RELEASE]
    at com.example.JitBackofficeApplication.main(JitBackofficeApplication.java:13) [classes/:na]
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.8.0_101]
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:1.8.0_101]
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.8.0_101]
    at java.lang.reflect.Method.invoke(Method.java:498) ~[na:1.8.0_101]
    at com.intellij.rt.execution.application.AppMain.main(AppMain.java:147) [idea_rt.jar:na]
Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [services.UserService] found for dependency [services.UserService]: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.raiseNoMatchingBeanFound(DefaultListableBeanFactory.java:1406) ~[spring-beans-4.3.2.RELEASE.jar:4.3.2.RELEASE]
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1057) ~[spring-beans-4.3.2.RELEASE.jar:4.3.2.RELEASE]
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1019) ~[spring-beans-4.3.2.RELEASE.jar:4.3.2.RELEASE]
    at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:566) ~[spring-beans-4.3.2.RELEASE.jar:4.3.2.RELEASE]
    ... 24 common frames omitted

My aplication.properties :我的应用程序属性:

spring.datasource.url=jdbc:mysql://localhost/jitdatabase
spring.datasource.username=root
spring.datasource.password=root
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.data.jpa.repositories.enabled=true

Here my Application file :这是我的应用程序文件:

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

@SpringBootApplication
@ComponentScan("controllers")
public class JitBackofficeApplication {

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

here theres is my architecture这是我的架构

Anyone have an solution ?有人有解决方案吗?

Regards问候

Your @ComponentScan annotation is wrong.您的@ComponentScan注释是错误的。 You only add the controller package as a component source.您只需将控制器包添加为组件源。

You need to add the package that contains both your controllers and Services.您需要添加包含控制器和服务的包。

Eg if your package structure is:例如,如果您的包结构是:

com.mycompany.controllers com.mycompany.controllers

com.mycompany.services com.mycompany.services

Then write com.mycompany into the @ComponentScan .然后将 com.mycompany 写入@ComponentScan

Also you should only use @Service on your service classes and not @Component .此外,您应该只在服务类上使用@Service而不是@Component

I got this problem before,I trace it and found that this is not the error of controller and service but the repository.I got this by the exception stack 'caused by xxx'.Finally I found the reason,I made a mistake when I config the datasource in application.properties,which lead to failure to connect the database.我之前也遇到过这个问题,我跟踪了一下,发现不是controller和service的错误,而是repository的错误。我是通过异常栈'caused by xxx'得到的,终于找到原因了在application.properties中配置datasource,导致连接数据库失败。

But your error is incomplete.I think your error is like as mine and I have some question to confirm.但是你的错误是不完整的。我认为你的错误和我的一样,我有一些问题需要确认。

1.Can you show your complete exception stack? 1.你能展示你完整的异常堆栈吗?

2.Can you show your application.properties? 2.你能展示你的application.properties吗?

3.Are you make sure that your database can connect successfully?You can use jdbc to test it. 3.你确定你的数据库可以连接成功吗?你可以用jdbc测试一下。

4.Do you have one datasource or more?More that one datasource will make configuration complex and have more probability to error. 4.你有一个还是多个数据源?多于一个数据源会使配置复杂且出错的可能性更大。

I got the same UnsatisfiedDependencyException and NoSuchBeanDefinitionException, so I checked that I had my @Service annotation on top of my service class, my @Repository on top of my JPA repository class, and that my Main class had @ComponentScan(basePackages = { "com.first.package.*", "com.second.package.*" }) to scan the package where my repository is.我得到了相同的 UnsatisfiedDependencyException 和 NoSuchBeanDefinitionException,所以我检查了我的@Service注释在我的服务类之上,我的@Repository在我的 JPA 存储库类之上,我的 Main 类有@ComponentScan(basePackages = { "com.first.package.*", "com.second.package.*" })扫描我的存储库所在的包。

Then I noticed that 2 repositories had the same class name!然后我注意到 2 个存储库具有相同的类名! One was in the first package, and the other was in the second package!一个在第一个包裹中,另一个在第二个包裹中! So Spring loaded just one and not the second one.所以 Spring 只加载了一个而不是第二个。 I renamed the second repository and it worked!我重命名了第二个存储库并且它起作用了! This could be also done using Qualifiers.这也可以使用限定符来完成。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 org.springframework.beans.factory.UnsatisfiedDependencyException:创建名称为bean的错误 - org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name org.springframework.beans.factory.UnsatisfiedDependencyException:创建bean时出错 - org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean org.springframework.beans.factory.UnsatisfiedDependencyException:创建bean时出错 - org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean spring - 启动(创建 bean 时出错) - org.springframework.beans.factory.UnsatisfiedDependencyException:使用名称创建 bean 时出错 - spring - boot (error while creating beans ) - org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 如何修复 org.springframework.beans.factory.UnsatisfiedDependencyException:创建名为“name”的 bean 时出错? - How to fix org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'name'? org.springframework.beans.factory.UnsatisfiedDependencyException:创建名称为&#39;customUserDetailsS​​ervice&#39;的bean时出错 - org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'customUserDetailsService' org.springframework.beans.factory.UnsatisfiedDependencyException:创建名称为&#39;loginController&#39;的bean时出错 - org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'loginController' org.springframework.beans.factory.UnsatisfiedDependencyException:创建名为“brightspotService”的bean时出错 - org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'brightspotService' org.springframework.beans.factory.UnsatisfiedDependencyException:创建名为“userServiceImpl”的bean时出错 - org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'userServiceImpl' 春天:&#39;org.springframework.beans.factory.UnsatisfiedDependencyException&#39;。 创建带有名称的 bean 时出错 - Spring: 'org.springframework.beans.factory.UnsatisfiedDependencyException' . Error creating bean with name
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM