J'ai une méthode d'appel qui est définie dans l'interface NoteService, l'implémentation de cette méthode est dans la classe NoteImpl. J'essaie d'accéder à cette méthode à partir de la classe Refresh, mais j'obtiens cette erreur
package com.new.macro.unity; import java.util.Set; public interface NoteService<T> { void call(Set<? extends T> Types); }
J'ai besoin d'aide pour résoudre cette erreur.
Voici ma classe Refresh d'où je essayez d'accéder à la méthode call
à partir de la classe NoteImpl
@Configuration public abstract class NoteImpl implements NoteService{ private static final Logger LOGGER = LogManager.getLogger(NoteImpl.class); private final RestTemplate restTemplate; private final String Url; public NoteImpl( RestTemplate restTemplate,@Value("${url}") String Url){ this.restTemplate = restTemplate; this.Url = Url; } public void call(Set<Inbuild> Types, String Url) { Set<String> results = new HashSet<>(); \\ Remaining functionality } }
Voici la classe NoteImpl avec fonctionnalité de méthode d'appel code>
package com.new.macro.rest; @Component public class Refresh implements BaseService { private final NoteService<Inbuild> iNoteService; public Refresh(final NoteService iNoteService) { this.iNoteService = iNoteService; } @PUT public String firstRefresh() { iNoteService.call(Types); return RefreshStatus.STARTED.toJsonResponse(); }
Voici l'interface
Parameter 3 of constructor in com.new.macro.rest.Refresh required a bean of type 'com.new.macro.unity.processorService' that could not be found. Action:Consider defining a bean of type 'com.new.macro.unity.NoteService' in your configuration.
3 Réponses :
Ajoutez l'annotation @Autowired
sur la tête du constructeur:
@Autowired public Refresh(final NoteService iNoteService) { this.iNoteService = iNoteService; }
Ensuite, vous obtiendrez un bean de NoteService
.
Cela donne la même erreur. D'autres suggestions? Y a-t-il quelque chose à voir avec ma logique d'accès à la méthode?
Ajoutez la même chose sur NoteImpl
en tête @Autowired public NoteImpl (RestTemplate restTemplate, @ Value ("$ {url}") String Url)
Même erreur, vérification de cette erreur AnnotationConfigEmbeddedWebApplicationContext - Exception rencontrée lors de l'initialisation du contexte - annulation de la tentative d'actualisation: org.springframework.beans.factory.UnsatisfiedDependencyExcep tion: Erreur lors de la création du bean avec le nom 'refresh' défini dans le fichier [Refresh.class] : Dépendance insatisfaite via le paramètre 3 du constructeur; l'exception imbriquée est org.springframework.beans.factory.NoSuchBeanDefinitionExcept ion: Aucun bean éligible de type 'com.new.macro.unity.processorService >' disponible: attendu au moins 1 bean qui se qualifie comme candidat autowire.
Ok puis changez NoteService
en NoteImpl
comme paramètre public Refresh (final NoteImpl iNoteImpl)
Je l'ai fait maintenant, il dit qu'il fallait un bean de type NoteImpl
Oui, vous devriez également ajouter ce que j'ai mentionné précédemment à propos de @Autowired
sur public NoteImpl (...)
et public Refresh (...)
ainsi que.
Sérieusement coincé à cette erreur pendant des jours, a essayé toutes les possibilités. Aucune suggestion? Merci
Salut toutes les suggestions pour ce qs stackoverflow.com/questions/59780621/... . Merci
En supposant que toutes ces classes sont analysées par le chemin de classe:
- NoteImpl
ne doit pas être abstrait
- NoteImpl
doit être annoté comme @Component
au lieu de @Configuration
. Les classes de configuration sont celles qui créent des beans
Pour résoudre ce problème, ne gardez pas NoteImpl comme classe abstraite - les classes abstraites ne peuvent pas être instanciées. Cela devrait résoudre le problème. Bien que @Configuration fonctionnera (car il est méta annoté avec @Component), @Service a du sens ici.
De plus, vous n'avez pas besoin de @Autowired lors de l'injection du constructeur - c'est facultatif. (Donc, l'autre réponse ne résoudra pas le problème)