2015-06-12 9 views
8

Ho un'applicazione Spring Boot (Y) che fa affidamento su un insieme di file Library compressi come x.jar e menzionati come dipendenza nel pom.xml dell'applicazione Y.Can not I @Autowire a Bean che è presente in un Jar Library dipendente?

x.jar ha un bean chiamato (User.java) Applicazione Y ha una classe Java di nome (Department.java)

mentre cerco di Autowire un'istanza di User.java all'interno Department.java, ottengo il seguente errore

Can 'I I @Autowire a Bean che è presente in una libreria Jar dipendente?

Impossibile campo autowire: utente com.User privato; l'eccezione annidata è org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean di qualificazione del tipo [com.User] trovato per la dipendenza: previsto a almeno 1 bean che si qualifica come candidato per l'autowire per questa dipendenza . annotazioni Dipendenza: {@ org.springframework.beans.factory.annotation.Autowired (richiesto = true)}

No fagioli qualifica di tipo [com.User] trovato per la dipendenza: atteso almeno 1 di fagioli che si qualifica come candidato autowire per questa dipendenza . annotazioni Dipendenza: {@ org.springframework.beans.factory.annotation.Autowired (richiesto = true)} **

ecco il codice nella primavera Boot Application 'Y'

package myapp; 

@Component 
public class Department { 

    @Autowired 
    private com.User user; 

    //has getter setters for user 

} 

Ecco il codice di User.java nella Biblioteca x.jar

package com; 

@Component 
@ConfigurationProperties(prefix = "test.userproperties") 
public class User { 

    private String name; 
    //has getter setters for name  
} 

Questa è la voce di dipendenza per x.jar nel pom.xml di applicazione Y

 <groupId>com.Lib</groupId> 
     <artifactId>x</artifactId> 
     <version>001</version> 
    </dependency> 

Questa è la classe principale nella Domanda 'Y'

@Configuration 
@EnableAutoConfiguration 
@ComponentScan 
@EnableZuulProxy 
@EnableGemfireSession(maxInactiveIntervalInSeconds=60) 
@EnableCircuitBreaker 
@EnableHystrixDashboard 
@EnableDiscoveryClient 
public class ZuulApplication { 

    public static void main(String[] args) { 
     new SpringApplicationBuilder(ZuulApplication.class).web(true).run(args); 
    } 
} 

Sia Dipartimento e degli utenti sono sotto diversi pacchetti.

Soluzione: ho applicato i seguenti 2 passaggi e ora l'Autowiring funziona correttamente.

Fase 1: aggiunta la seguente classe nel file jar

package com 
@Configuration 
@ComponentScan 
public class XConfiguration { 

} 

Fase 2: importato questa classe di configurazione nella classe principale del progetto Y

@Configuration 
    @EnableAutoConfiguration 
    @ComponentScan 
    @EnableZuulProxy 
    @EnableGemfireSession(maxInactiveIntervalInSeconds=60) 
    @EnableCircuitBreaker 
    @EnableHystrixDashboard 
    @EnableDiscoveryClient 
    @Import(XConfiguration.class) 
    public class ZuulApplication { 

     public static void main(String[] args) { 
      new SpringApplicationBuilder(ZuulApplication.class).web(true).run(args); 
     } 
    } 
+2

Mostra la tua contesto di applicazione per favore. – Jens

+1

Probabilmente non si dispone della scansione dei componenti per i pacchetti di tale libreria –

+0

non abbiamo utilizzato l'XML del contesto dell'applicazione, ma solo le annotazioni. L'applicazione Y è un'applicazione Spring Boot. – yathirigan

risposta

7

si avrebbe bisogno di aggiungere il i nomi dei pacchetti della classe principale e della classe User devono essere sicuri al 100%, ma più probabilmente, la classe User non si trova nello stesso pacchetto (o sotto pacchetto) della tua classe principale. Ciò significa che la scansione dei componenti non la raccoglierà.

È possibile forzare la primavera a guardare altri pacchetti come questo:

@ComponentScan(basePackages = {"org.example.main", "package.of.user.class"}) 
+0

la tua citazione di componentScan è stata la ragione, ma ho usato un approccio leggermente diverso. aggiornato la domanda con la soluzione finale di lavoro. grazie. – yathirigan

Problemi correlati