NoSuchBeanDefinitionException quando il pacchetto viene modificato da hello a foo.

StackOverflow https://stackoverflow.com//questions/23025400

  •  21-12-2019
  •  | 
  •  

Domanda

Posso far funzionare correttamente il programma di esempio Spring Boot quando seguo le istruzioni disponibili su https://spring.io/guides/gs/spring-boot/.

Se aggiungo HelloService e HelloServiceImpl, codice mostrato di seguito, al pacchetto hello e cambio HelloController.java per chiamare il metodo sayHello, funziona come previsto e da http://localhost:8080, vedo il messaggio mostrato di seguito, come previsto.

Saluti da Spring Boot!helloService = Ciao da HelloServiceImpl

Ora, se sposto HelloService e HelloServiceImpl in pippo package, quindi dopo la compilazione quando lo eseguo, ottengo l'errore mostrato di seguito.

Perché il sistema/struttura a molla non è in grado di raccogliere i fagioli necessari da 'pippo' pacchetto?Sono in grado di verificare che possa raccogliere il bean con successo Ciao pacchetto, però.

Grazie,

cat HelloService.java

package hello;

public interface HelloService {

    public String sayHello();   

}

cat HelloServiceImpl.java

package hello;
import org.springframework.stereotype.Service;


@Service("helloService")
public class HelloServiceImpl implements HelloService {

    /* (non-Javadoc)
     * @see com.apress.prospring3.springblog.service.HelloService#sayHello()
     */
    @Override
    public String sayHello() {
        return "Hello  from HelloServiceImpl ";
    }

}

In HelloController.java, modificare l'istruzione return nel metodo dell'indice come mostrato di seguito, in modo che venga richiamato il servizio hello.

cat HelloController.java

package hello;


import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;


@RestController
public class HelloController {

    @Autowired 
    private HelloService helloService;

    @RequestMapping("/")
    public String index() {
        return "Greetings from Spring Boot! helloService = " + helloService.sayHello();
    }
}

Quando eseguo il comando mostrato di seguito, non si verificano errori.

$ java -jar target/gs-spring-boot-0.1.0.jar

$ versione Java

java version "1.8.0"
Java(TM) SE Runtime Environment (build 1.8.0-b132)
Java HotSpot(TM) 64-Bit Server VM (build 25.0-b70, mixed mode)

$ quale Java

/usr/bin/java

$ ls -lt /usr/bin/java

lrwxr-xr-x 1 root wheel 74 9 marzo 22:00 /usr/bin/java -> /System/Library/Frameworks/JavaVM.framework/Versions/Current/Commands/java

Se sposto HelloService.java e HelloServiceImpl.java in pippo pacchetto da Ciao package e nessun'altra modifica, ottengo l'errore seguente quando provo a eseguirlo.Perché non è in grado di riprendere da 'pippo' pacchetto quando può farlo con successo da Ciao pacchetto?Come risolvere questo problema?Significa che queste due classi devono risiedere in Ciao pacchetto solo perché funzioni?

Grazie,

java.lang.reflect.InvocationTargetException
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:483)
    at org.springframework.boot.loader.MainMethodRunner.run(MainMethodRunner.java:53)
    at java.lang.Thread.run(Thread.java:744)
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'helloController': Injection of autowired dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire field: private foo.HelloService hello.HelloController.helloService; nested exception is org.springframework.beans.factory.**NoSuchBeanDefinitionException**: No qualifying bean of type [foo.HelloService] found for dependency: 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.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:292)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1180)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:537)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:475)
    at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:300)
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:228)
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:296)
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:195)
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:660)
    at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:760)
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:482)
    at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.refresh(EmbeddedWebApplicationContext.java:122)
    at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:552)
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:293)
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:749)
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:738)
    at hello.Application.main(Application.java:17)
    ... 6 more

Causato da:org.springframework.beans.factory.BeanCreationException:Impossibile cablare automaticamente il campo:privato foo.HelloService ciao.HelloController.helloService;l'eccezione nidificata è org.springframework.beans.factory.NoSuchBeanDefinitionException:Nessun bean qualificante di tipo [foo.HelloService] trovato per la dipendenza:previsto almeno 1 bean che si qualifica come candidato autowire per questa dipendenza.Annotazioni sulle dipendenze:{@org.springframework.beans.factory.annotation.autowired (Rebled = true)} su org.springframework.beans.factory.annotation.autowiredAnnitionBeanPostProcessor $ AUTOWIREDFIFFIELLEMENT.Inject (autowiredAnnitionBeAnPostProcessor:508 a Org. .Notation.InjectionMetadata.Inject (InjectionMetadata.java:87) su org.springframework.beans.factory.Annotation.AutowiredAnnitionBeanPostProcessor.PostProcessPropertyValues ​​(AutowiredAnNotationBanSprocessor.java:289) ...22 altri causati da:org.springframework.beans.factory.NoSuchBeanDefinitionException:Nessun bean qualificante di tipo [foo.HelloService] trovato per la dipendenza:previsto almeno 1 bean che si qualifica come candidato autowire per questa dipendenza.Annotazioni sulle dipendenze:{@org.springframework.beans.factory.annotation.Autowired(required=true)} at org.springframework.beans.factory.support.DefaultListableBeanFactory.raiseNoSuchBeanDefinitionException(DefaultListableBeanFactory.java:1060) at org.springframework.beans.factory.support .DefaultListableBeanFactory.doresolvedency (defaultListableBeanFactory.java:920) su Org.springFramework.beans.factory.support.DefaultListableBeanFactory.Resoldependency (defaultListableBeanFactory.java:815) At Org.springFanfActory. iRedAnnotationBeanPostProcessor $ AutowiredFieldElement.Inject (AutowiredAnnitionBeanPostProcessor .java: 480) ...Altri 24

È stato utile?

Soluzione

Inizialmente, quando HelloService si trova nel pacchetto hello, @ComponentScan nella classe Configuration indica a Spring di cercare altri componenti, configurazioni e servizi nel pacchetto hello, consentendogli di trovare questa classe.Ora che hai spostato HelloService nel pacchetto foo, @ComponentScan non riesce più a trovarlo;è necessario specificare anche il nuovo nome del pacchetto, ad esempio:

    @ComponentScan({"hello","foo"})
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top