UnfinishedDependencyException: fout bij maken van bean met naam

Ik probeer al een aantal dagen een Spring CRUD-toepassing te maken. Ik ben verward.
Ik kan deze fouten niet oplossen.

org.springframework.beans.factory.UnfilledDependencyException: Fout bij het maken van bean met de naam ‘clientController’: Onvoldaan afhankelijkheid uitgedrukt door methode ‘setClientService’ parameter 0; geneste uitzondering is org.springframework.beans.factory.UnfinishedDependencyException: Fout bij het maken van een bean met de naam ‘clientService’: niet-voldane afhankelijkheid uitgedrukt via veld ‘clientRepository’; geneste uitzondering is org.springframework.beans.factory.NoSuchBeanDefinitionException: Geen kwalificerende bean van het type ‘com.kopylov.repository.ClientRepository’ beschikbaar: verwacht ten minste 1 bean die in aanmerking komt als autowire-kandidaat. Afhankelijkheidsannotaties: {@org.springframework.beans.factory.annotation.Autowired(required=true)}

en dit

org.springframework.beans.factory.UnfilledDependencyException: Fout bij het maken van een bean met de naam ‘clientService’: niet-voldane afhankelijkheid uitgedrukt in het veld ‘clientRepository’; geneste uitzondering is org.springframework.beans.factory.NoSuchBeanDefinitionException: Geen kwalificerende bean van het type ‘com.kopylov.repository.ClientRepository’ beschikbaar: verwacht ten minste 1 bean die in aanmerking komt als autowire-kandidaat. Afhankelijkheidsannotaties: {@org.springframework.beans.factory.annotation.Autowired(required=true)}

ClientController

@Controller
public class ClientController {
private ClientService clientService;
@Autowired
@Qualifier("clientService")
public void setClientService(ClientService clientService){
    this.clientService=clientService;
}
@RequestMapping(value = "registration/add", method = RequestMethod.POST)
public String addUser(@ModelAttribute Client client){
    this.clientService.addClient(client);
return "home";
}
}

clientserviceimpl

@Service("clientService")
public class ClientServiceImpl implements ClientService{
private ClientRepository clientRepository;
@Autowired
@Qualifier("clientRepository")
public void setClientRepository(ClientRepository clientRepository){
    this.clientRepository=clientRepository;
}
@Transactional
public void addClient(Client client){
    clientRepository.saveAndFlush(client);
}
}

ClientRepository

public interface ClientRepository extends JpaRepository<Client, Integer> {
}

Ik keek veel soortgelijke vragen door, maar niemand antwoord op hen kan me niet helpen.


Antwoord 1, Autoriteit 100%

De clientrepository moet worden geannoteerd met @Repositorytag.
Met uw huidige configuratie zal de lente de klas niet scannen en er kennis over hebben. Op het moment van opstarten en bedrading vindt de clientrepository class niet.

bewerken
Als het toevoegen van de @RepositoryTag niet helpt, dan denk ik dat het probleem nu met de ClientServiceen ClientServiceImplkan zijn.

Probeer de ClientService(interface) te annoteren met @Service. Zoals u alleen een enkele implementatie voor uw service zou moeten hebben, hoeft u geen naam op te geven met de optionele parameter @Service("clientService"). De lente zal het autogenereren op basis van de naam van de interface.

Zoals BRUNO genoemd, is de @Qualifierniet nodig in de ClientControllerzoals u slechts één implementatie voor de service hebt.

clientservice.java

@Service
public interface ClientService {
    void addClient(Client client);
}

clientserviceimpl.java (optie 1)

@Service
public class ClientServiceImpl implements ClientService{
    private ClientRepository clientRepository;
    @Autowired
    public void setClientRepository(ClientRepository clientRepository){
        this.clientRepository=clientRepository;
    }
    @Transactional
    public void addClient(Client client){
        clientRepository.saveAndFlush(client);
    }
}

clientserviceimpl.java (optie 2 / voorkeur)

@Service
public class ClientServiceImpl implements ClientService{
    @Autowired
    private ClientRepository clientRepository;
    @Transactional
    public void addClient(Client client){
        clientRepository.saveAndFlush(client);
    }
}

clientcontroller.java

@Controller
public class ClientController {
    private ClientService clientService;
    @Autowired
    //@Qualifier("clientService")
    public void setClientService(ClientService clientService){
        this.clientService=clientService;
    }
    @RequestMapping(value = "registration", method = RequestMethod.GET)
    public String reg(Model model){
        model.addAttribute("client", new Client());
        return "registration";
    }
    @RequestMapping(value = "registration/add", method = RequestMethod.POST)
    public String addUser(@ModelAttribute Client client){
        this.clientService.addClient(client);
    return "home";
    }
}

Antwoord 2, autoriteit 14%

Ik weet dat het te laat lijkt, maar het kan anderen in de toekomst helpen.

Ik heb dezelfde fout en het probleem was dat Spring Boot mijn dienstenpakket niet heeft gelezen, dus voeg toe:

@ComponentScan(basePackages = {"com.example.demo.Services"})(u moet uw eigen pad naar het servicespakket specificeren) en in de klasse demoApplication(klasse die de hoofdfunctie heeft) en voor de service-interface moet worden geannoteerd @Serviceen de klasse die de service-interface implementeert, moet worden geannoteerd met @Component, en vervolgens de service-interface.


Antwoord 3, autoriteit 9%

Probeer @EntityScan(basePackages = “vul hier de pakketnaam in”) toe te voegen aan uw hoofdklasse.


Antwoord 4, autoriteit 9%

Dat kan gebeuren omdat de pojo’s die u gebruikt, niet de precieze constructor hebben die de service nodig heeft. Dat wil zeggen, probeer alle constructors te genereren voor de pojo of objecten (modelobject) die uw serviceClient gebruikt, zodat de client correct kan worden geïnstitueerd. In uw geval regenereert u de constructors (met argumenten) voor uw clientobject (dat is uw modelobject).


Antwoord 5, autoriteit 9%

Als je Spring Boot gebruikt, zou je hoofdapp er zo uit moeten zien (om dingen op een eenvoudige manier te maken en te begrijpen) –

package aaa.bbb.ccc;
@SpringBootApplication
@ComponentScan({ "aaa.bbb.ccc.*" })
public class Application {
.....

Zorg ervoor dat je @Repository en @Service correct hebt geannoteerd.

Zorg ervoor dat al uw pakketten onder – AAA.BBB.CCC. *

In de meeste gevallen is deze setup dit soort triviale problemen opgelost. Hier is een volledig geblazen voorbeeld. Hoop dat het helpt.


Antwoord 6, Autoriteit 7%

Ik heb net de @Repositoryannotatie naar repository interface en @EnableJpaRepositories(“domein.repositroy-pakket”) naar de hoofdklasse. Het werkte prima.


Antwoord 7, Autoriteit 5%

De toepassing moet in dezelfde map worden geplaatst als het gescande pakket:


Antwoord 8, Autoriteit 2%

volgens documentatie U moet XML-configuratie instellen:

<jpa:repositories base-package="com.kopylov.repository" />

Antwoord 9, Autoriteit 2%

Gezien het scannen van uw pakket correct is ingesteld via de XML-configuratie of op annotatie gebaseerde configuratie.

U hebt een @Repositoryop uw ClientRepositoryimplementatie nodig om de lente te gebruiken om het in een @Autowiredte gebruiken. Omdat het niet hier is, kunnen we alleen maar veronderstellen dat dat is wat er ontbreekt.

Naarmate een zijkant opmerking, is het schoner om uw @Autowired/ @Qualifierrechtstreeks op uw lid te plaatsen als de Setter-methode alleen wordt gebruikt voor de @Autowired.

@Autowired
@Qualifier("clientRepository")
private ClientRepository clientRepository;

Ten slotte heb je de @Qualifierniet nodig, want er is maar één klasse die de bean-definitie implementeert, dus tenzij je meerdere implementaties hebt van ClientServiceen ClientRepositoryje kunt de @Qualifier

remove verwijderen


Antwoord 10, autoriteit 2%

Als u een veld beschrijft als criteria in de methodedefinitie (“findBy”), moet u die parameter doorgeven aan de methode, anders krijgt u de uitzondering “Onvoldaan afhankelijkheid uitgedrukt door methodeparameter”.

public interface ClientRepository extends JpaRepository<Client, Integer> {
       Client findByClientId();                ////WRONG !!!!
       Client findByClientId(int clientId);    /// CORRECT 
}

*Ik neem aan dat uw klantentiteit het kenmerk clientId heeft.


Antwoord 11, autoriteit 2%

Voeg @Component-annotatie toe net boven de componentdefinitie


Antwoord 12

Voeg @Repository-annotatie toe aan de Spring Data JPA-repo


Antwoord 13

Ik had precies hetzelfde probleem, met een heel erg lange stacktracering.
Aan het einde van de trace zag ik dit:

InvalidQueryException: Keyspace ‘mykeyspace’ bestaat niet

Ik heb de sleutelruimte in cassandra gemaakt en het probleem opgelost.

CREATE KEYSPACE mykeyspace
  WITH REPLICATION = { 
   'class' : 'SimpleStrategy', 
   'replication_factor' : 1 
  };

Antwoord 14

Ik had hetzelfde probleem, en dat was ook zo, omdat ik mijn DAO-klasse niet had gemarkeerd met Entity-annotaties. Ik heb het hieronder geprobeerd en de fout is opgelost.

/**
*`enter code here`
*/
@Entity <-- was missing earlier
    public class Topic {
        @Id  
        String id;
        String name;
        String desc;
    .
    .
    .
    }

Antwoord 15

Bekijk de tabelstructuur van de Client-tabel, als er een mismatch is tussen de tabelstructuur in db en de entiteit, krijgt u deze foutmelding..

Ik had deze fout die het gevolg was van een niet-overeenkomende datatype van de primaire sleutel tussen db-tabel en de entiteit …


Antwoord 16

Dat was de versie-incompatibiliteit waar het de toevoeging van sla was. Toen ik uitsloot, werkte het voor mij.

<!--Spring-Boot 2.0.0 -->
    <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-data-redis</artifactId>
                <exclusions>
                    <exclusion>
                        <groupId>io.lettuce</groupId>
                        <artifactId>lettuce-core</artifactId>
                    </exclusion>
                </exclusions>    
            </dependency>
            <dependency>
                <groupId>redis.clients</groupId>
                <artifactId>jedis</artifactId>
            </dependency>

Antwoord 17

Er is een andereinstantie die nog steeds dezelfde fout laat zien nadat je alles hierboven hebt gedaan. Wanneer u uw codes overeenkomstig de genoemde oplossingen wijzigt, zorg er dan voor dat u de originelen bewaart. Je kunt dus gemakkelijk terug. Dus ga en controleer nogmaals controleer de locatie van het basispakket van het configuratiebestand van de dispatcher-servelet. Is het het scannen van alle relevante pakkettenwanneer u de applicatie uitvoert.

<context:component-scan base-package="your.pakage.path.here"/>

Antwoord 18

Deze fout kan optreden als er syntaxisfouten zijn met afgeleide query-methoden. Bijvoorbeeld, als er enkele mismatches zijn met velden voor entiteitsklasse en de namen van de afgeleide methoden.


Antwoord 19

Voeg gewoon @Service annotatie toe aan de bovenkant van de serviceklasse


Antwoord 20

Zie of uw <context:component-scan base-package="your package "/>ontbreekt in config of context XML-bestand

Other episodes