I ont le haricot ci-après défini comme étant une partie A.jarNoUniqueBeanDefinitionException: Non bean de qualification de type: Ce ne sont pas retournés
package abc;
@Component
public class ParentInterceptor implements ClientInterceptor {
}
j'ai créé un autre haricot dans un autre projet sous un autre paquet par l'extension ParentInerceptor
package xyz;
@Component
public class ChildInterceptor extends ParentInterceptor {
}
Dans mon application SpringBoot, j'ai un haricot défini ci-dessous semblable à
@ComponentScan({"abc","xyz"})
public class Application {
public static void main(String[] args) {
ApplicationContext ctx = SpringApplication.run(Application.class, args);
}
@Bean
public Data dataRepo(ParentInterceptor p){
}
}
Lorsque j'exécute la méthode principale, je m'attends à voir NoUniqueBeanDefinitionException car 2 beans sont du même type. Cependant, je vois à la fois les beans sont chargés et ParentInterceptor est utilisé. Y at-il une raison pour laquelle l'erreur n'est pas lancée?
EDIT
Cependant, quand je l'ai fait au-dessous, j'ai pu voir l'erreur d'être jeté. Cependant, je suis toujours incapable de comprendre pourquoi une erreur n'a pas été lancée dans le cas mentionné ci-dessus.
package xyz;
@Component
public class ChildInterceptor1 extends ChildInterceptor {
}
classe Application:
@ComponentScan({"abc","xyz"})
public class Application {
public static void main(String[] args) {
ApplicationContext ctx = SpringApplication.run(Application.class, args);
}
@Bean
public Data dataRepo(ChildInterceptor p){
}
}
EDIT 2
J'ai essayé aussi de vérifier si le grain de l'enfant qui s'étend en effet le parent à l'aide du code ci-dessous -
ctx.getBeansOfType(ParentInterceptor.class)
Ce rendement ParentInterceptor & ChildInceptceptor. Donc, je ne suis pas vraiment sûr pourquoi Spring ne retourne pas l'erreur!
Je suis d'accord que le premier cas devrait échouer. Pouvez-vous partager un exemple complet qui reproduit le problème? –
Merci Andy. Cela fait partie d'un grand projet, mais je suis incapable de créer une application autonome pour répliquer ce problème. Cependant j'essaie toujours de faire ça. –
Y a-t-il un paramètre qui contournerait cette erreur et injecterait la classe appropriée? Dans mon cas, je suis en mesure de voir le ParentInterceptor étant injecté. Cependant, lorsque je définis l'annotation @Primary sur ClientInterceptor, ClientInterceptor est injecté. Existe-t-il une configuration avec l'annotation SpringBootApplication (convention sur la configuration), qui permet à Spring de choisir les beans appropriés sans générer d'erreur? Désolé, je suis toujours incapable de trouver un exemple où je peux reproduire cela. Je reçois toujours NoUniqueBeanDefinitionException et semble manquer une certaine config. –