2016-05-13 14 views
5

Sono nuovo in Primavera e cerco di creare un'applicazione per l'apprendimento ma sto riscontrando problemi in Autowiring, sto aggiungendo il mio codice. Sto lavorando allo stivale primaverile.org.springframework.beans.factory.UnsatisfiedDependencyException: Errore nella creazione di bean con nome 'demoRestController'

Primavera Boot Codice

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

ho cercato seguenti scenari per fare il mio lavoro @Autowired:

  1. @Autowired to LoginBean loginBean;
  2. Impostato getter setter di LoginBean nella classe Controller e setter autowired;
  3. Costruttore creato di Controller e avviato automaticamente, come indicato nel codice precedente;

Di seguito è l'errore che sto ottenendo

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

Ciao Ho risolto il mio problema. @Andy Grazie mille per la tua preziosa risposta. Mi dispiace che avrei dovuto fornire anche la mia classe di applicazione SpringBoot.In realtà il problema principale era nella classe di applicazione di Spring Boot. Sto fornendo codice. public class DemoApplication { \t void main (String [] args) {pubblici statici \t \t SpringApplication.run (DemoApplication.class, args); \t} } Il nome classe e il nome classe parametro devono essere uguali e questo era il mio problema reale. – Brain

risposta

13

La vostra classe DemoApplication è nel pacchetto com.ag.digital.demo.boot e la classe LoginBean è nel pacchetto com.ag.digital.demo.bean. Per default i componenti (classi annotate con @Component) vengono trovati se si trovano nello stesso pacchetto o sotto pacchetto della classe principale dell'applicazione DemoApplication. Ciò significa che LoginBean non viene trovato, quindi l'iniezione della dipendenza non riesce.

ci sono un paio di modi per risolvere il problema:

  1. Spostare LoginBean in com.ag.digital.demo.boot o un sub-package.
  2. Configurare i pacchetti scansionati per i componenti utilizzando l'attributo scanBasePackages di @SpringBootApplication che dovrebbe essere su DemoApplication.

Alcune delle altre cose che non stanno causando un problema, ma non sono abbastanza di destra con il codice che hai postato:

  • @Service è una specializzazione di @Component in modo che non è necessario sia sul LoginBean
  • Allo stesso modo, @RestController è una specializzazione di @Component quindi non c'è bisogno sia sul DemoRestController
  • DemoRestController è un luogo insolito per @EnableAutoConfiguration. Tale annotazione si trova in genere nella classe principale dell'applicazione (DemoApplication) direttamente o tramite @SpringBootApplication che è una combinazione di @ComponentScan, @Configuration e @EnableAutoConfiguration.
Problemi correlati