2016-05-13 23 views
5

Tôi mới vào mùa xuân và tôi cố gắng tạo một ứng dụng cho việc học nhưng tôi gặp vấn đề trong Autowiring, tôi đang thêm mã của mình. Tôi đang làm việc trên khởi động mùa xuân.org.springframework.beans.factory.UnsatisfiedDependencyException: Lỗi tạo bean với tên 'demoRestController'

Xuân Boot Mã

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; 
    } 

tôi đã cố gắng kịch bản sau đây để làm cho công việc của tôi @Autowired:

  1. @Autowired to LoginBean loginBean;
  2. Tạo bộ khởi động getter của LoginBean trong lớp Bộ điều khiển và các bộ định tuyến tự động;
  3. Tạo hàm tạo của Controller và autowired, như được đưa ra trong mã trên;

Dưới đây là những lỗi mà tôi đang nhận được

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 
+0

Xin chào, tôi đã giải quyết được vấn đề của mình. @Andy Cảm ơn bạn rất nhiều vì câu trả lời có giá trị của bạn. Tôi xin lỗi tôi nên đã cung cấp lớp ứng dụng SpringBoot của tôi cũng có.Trên thực tế, vấn đề chính là trong lớp ứng dụng của Spring Boot. Tôi đang cung cấp Mã. lớp công khai DemoỨng dụng { \t chính void tĩnh chính (String [] args) { \t \t SpringApplication.run (DemoApplication.class, args); \t} } Tên lớp và tên lớp thông số phải giống nhau và đây là vấn đề thực tế của tôi. – Brain

Trả lời

13

lớp DemoApplication của bạn là trong gói com.ag.digital.demo.boot và lớp LoginBean của bạn là trong gói com.ag.digital.demo.bean. Theo mặc định các thành phần (các lớp được chú thích với @Component) được tìm thấy nếu chúng nằm trong cùng một gói hoặc một gói phụ của lớp ứng dụng chính của bạn DemoApplication. Điều này có nghĩa là LoginBean không được tìm thấy vì vậy việc tiêm phụ thuộc không thành công.

Có một vài cách để giải quyết vấn đề của bạn:

  1. Move LoginBean vào com.ag.digital.demo.boot hay một tiểu gói.
  2. Định cấu hình các gói được quét cho các thành phần sử dụng thuộc tính scanBasePackages của @SpringBootApplication phải nằm trên DemoApplication.

Một vài trong số những thứ khác mà không gây ra một vấn đề, nhưng không hoàn toàn đúng với mã bạn đã đăng:

  • @Service là một chuyên ngành của @Component do đó bạn không cần cả trên LoginBean
  • Tương tự, @RestController là một chuyên ngành của @Component do đó bạn không cần cả hai trên DemoRestController
  • DemoRestController được một nơi khác thường cho @EnableAutoConfiguration. Chú thích đó thường được tìm thấy trong lớp ứng dụng chính của bạn (DemoApplication) trực tiếp hoặc qua @SpringBootApplication là sự kết hợp của @ComponentScan, @Configuration@EnableAutoConfiguration.
Các vấn đề liên quan