0
votes

Paramètre 3 de constructeur en requiert un haricot de type 'paquet' qui n'a pas pu être trouvé

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.


0 commentaires

3 Réponses :


0
votes

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 .


8 commentaires

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



0
votes

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


0 commentaires

0
votes

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)


0 commentaires