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);
}
}
Mostra la tua contesto di applicazione per favore. – Jens
Probabilmente non si dispone della scansione dei componenti per i pacchetti di tale libreria –
non abbiamo utilizzato l'XML del contesto dell'applicazione, ma solo le annotazioni. L'applicazione Y è un'applicazione Spring Boot. – yathirigan