J'ai une application Spring Boot (Y) qui s'appuie sur un ensemble de fichiers de bibliothèque compressés sous x.jar et mentionnés comme une dépendance dans le pom.xml de l'application Y.
x.jar a un bean nommé (User.Java) L'application Y a une classe Java nommée (Department.Java)
Pendant que j'essaie de câbler automatiquement une instance de User.Java dans Department.Java, j'obtiens l'erreur suivante
Je ne peux pas @Autowire un bean qui est présent dans un bocal de bibliothèque dépendant?
Champ de câblage automatique impossible: utilisateur com.User privé; Une exception imbriquée est org.springframework.beans.factory.NoSuchBeanDefinitionException: aucun bean éligible de type [com.User] n'a été trouvé pour la dépendance: attendait au moins 1 bean qui se qualifie comme candidat de câblage automatique pour cette dépendance. Annotations de dépendance: {@ org.springframework.beans.factory.annotation.Autowired (required = true)}
Aucun bean qualifiant de type [com.User] trouvé pour la dépendance: attend au moins 1 bean qui se qualifie comme candidat de câblage automatique pour cette dépendance. Annotations de dépendance: {@ org.springframework.beans.factory.annotation.Autowired (required = true)} **
Voici le code de l'application Spring Boot 'Y'
package myapp;
@Component
public class Department {
@Autowired
private com.User user;
//has getter setters for user
}
Voici le code de User.Java dans la bibliothèque x.jar
package com;
@Component
@ConfigurationProperties(prefix = "test.userproperties")
public class User {
private String name;
//has getter setters for name
}
Il s'agit de l'entrée de dépendance pour x.jar dans le pom.xml de l'application Y
<groupId>com.Lib</groupId>
<artifactId>x</artifactId>
<version>001</version>
</dependency>
Ceci est la classe principale de l'application "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);
}
}
Le département et l'utilisateur sont sous des packages différents.
Solution: J'ai appliqué les 2 étapes suivantes et maintenant le câblage automatique fonctionne correctement.
Étape 1: Ajout de la classe suivante dans le fichier jar
package com
@Configuration
@ComponentScan
public class XConfiguration {
}
Étape 2: importé cette classe de configuration dans la classe principale du projet 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);
}
}
Vous devez ajouter les noms de package de votre classe principale et de la classe User pour être sûr à 100%, mais plus probablement, la classe User n'est pas dans le même package (ou un sous-package) de votre classe principale. Cela signifie que la numérisation des composants ne les récupérera pas.
Vous pouvez forcer Spring à regarder d'autres packages comme celui-ci:
@ComponentScan(basePackages = {"org.example.main", "package.of.user.class"})