Injeção de Dependencia - Como resolver?

Field almoxarifadoRepository in com.example.application.service.AlmoxarifadoService required a bean of type 'com.example.application.repository.AlmoxarifadoRepository' that could not be found.

The injection point has the following annotations:
	- @org.springframework.beans.factory.annotation.Autowired(required=true)


Action:

Consider defining a bean of type 'com.example.application.repository.AlmoxarifadoRepository' in your configuration.

AlmoxarifadoService

package com.example.application.service;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import com.example.application.backend.Almoxarifado;
import com.example.application.repository.AlmoxarifadoRepository;

@Service
public class AlmoxarifadoService {

	// CRUD

	@Autowired(required = true)
	private AlmoxarifadoRepository almoxarifadoRepository;

	public void create(Almoxarifado almoxarifado) {
		almoxarifadoRepository.save(almoxarifado);
	}

	public List<Almoxarifado> read() {
		List<Almoxarifado> almoxarifados = almoxarifadoRepository.findAll();
		return almoxarifados;

	}

	public void update(Almoxarifado almoxarifado) {
		almoxarifadoRepository.save(almoxarifado);

	}

	public void delete(Almoxarifado almoxarifado) {
		almoxarifadoRepository.delete(almoxarifado);
	}
}

Vc anotou AlmoxarifadoRepository com @Repository?

Tinha que ficar algo assim:

@Repository
public interface AlmoxarifadoRepository
         extends JpaRepository<Almoxarifado, Integer> {
Observação: por padrão o valor de required do @Autowired já é true.
1 curtida

@wldomiciano

Sim está com esta anotação desde o inicio

package com.example.application.repository;

import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;

import com.example.application.backend.Almoxarifado;

@Repository
public interface AlmoxarifadoRepository extends JpaRepository<Almoxarifado, Long> {

}

Em qual pacote está a classe anotada com @SpringBootApplication?

1 curtida

@wldomiciano

package com.example.application;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.web.servlet.support.SpringBootServletInitializer;
import org.vaadin.artur.helpers.LaunchUtil;

/**
 * The entry point of the Spring Boot application.
 */
@SpringBootApplication
public class Application extends SpringBootServletInitializer {

    public static void main(String[] args) {
        LaunchUtil.launchBrowserInDevelopmentMode(SpringApplication.run(Application.class, args));
    }

}

Eu achei que poderia ser por causa da organização dos pacotes, mas sua organização está bem parecida com a que uso. Estranho.

1 curtida

@wldomiciano

alguma outra ideia do que está acontecendo?

Uma coisa diferente que achei é que vc está extendendo SpringBootServletInitializer, nos meus códigos eu nunca precisei extender essa classe. Vc poderia tenter remover esse extends só pra ver.

Fora isso não tenho mais ideias, me desculpe.

1 curtida

@wldomiciano

obg por sua ajuda, fiz o que sugeriu, mas o erro persiste

Faz um teste utilizando a injeção de dependência pelo construtor!

Exemplo:

@Service
public class AlmoxarifadoService {

    private final AlmoxarifadoRepository almoxarifadoRepository;

    public AlmoxarifadoService(AlmoxarifadoRepository almoxarifadoRepository) {
        this.almoxarifadoRepository = almoxarifadoRepository;
    }

    ....

}
2 curtidas

@Jonathan_Medeiros

tentei com sua dica, mas obtive outra msg

Description:

Parameter 0 of constructor in com.example.application.service.AlmoxarifadoService required a bean of type 'com.example.application.repository.AlmoxarifadoRepository' that could not be found.


Action:

Consider defining a bean of type 'com.example.application.repository.AlmoxarifadoRepository' in your configuration. 



package com.example.application.service;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import com.example.application.backend.Almoxarifado;
import com.example.application.repository.AlmoxarifadoRepository;

@Service
public class AlmoxarifadoService {

	private final AlmoxarifadoRepository almoxarifadoRepository;

	public AlmoxarifadoService(AlmoxarifadoRepository almoxarifadoRepository) {
		this.almoxarifadoRepository = almoxarifadoRepository;
	}

	public void create(Almoxarifado almoxarifado) {
		almoxarifadoRepository.save(almoxarifado);
	}

	public List<Almoxarifado> read() {
		List<Almoxarifado> almoxarifados = almoxarifadoRepository.findAll();
		return almoxarifados;

	}

	public void update(Almoxarifado almoxarifado) {
		almoxarifadoRepository.save(almoxarifado);

	}

	public void delete(Almoxarifado almoxarifado) {
		almoxarifadoRepository.delete(almoxarifado);
	}
}

Como está a estrutura geral do seu projeto, consegue compartilhar uma imagem da hierarquia de pastas/pacotes/classes e afins?

Aparentemente por algum motivo o Spring não está carregando o Bean do seu repositório para IoC container, e por isso ele não consegue fazer a injeção de dependência.

Faltou o @Autowired no construtor:

@Service
public class AlmoxarifadoService {

    private final AlmoxarifadoRepository almoxarifadoRepository;

    @Autowired
    public AlmoxarifadoService(AlmoxarifadoRepository almoxarifadoRepository) {
        this.almoxarifadoRepository = almoxarifadoRepository;
    }

@Jonathan_Medeiros

@staroski

continua com este erro:

Description:

Parameter 0 of constructor in com.example.application.service.AlmoxarifadoService required a bean of type 'com.example.application.repository.AlmoxarifadoRepository' that could not be found.


Action:

Consider defining a bean of type 'com.example.application.repository.AlmoxarifadoRepository' in your configuration. 

Classe

package com.example.application.service;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import com.example.application.backend.Almoxarifado;
import com.example.application.repository.AlmoxarifadoRepository;

@Service
public class AlmoxarifadoService {

	@Autowired
	private final AlmoxarifadoRepository almoxarifadoRepository;

	public AlmoxarifadoService(AlmoxarifadoRepository almoxarifadoRepository) {
		this.almoxarifadoRepository = almoxarifadoRepository;
	}

	public void create(Almoxarifado almoxarifado) {
		almoxarifadoRepository.save(almoxarifado);
	}

	public List<Almoxarifado> read() {
		List<Almoxarifado> almoxarifados = almoxarifadoRepository.findAll();
		return almoxarifados;

	}

	public void update(Almoxarifado almoxarifado) {
		almoxarifadoRepository.save(almoxarifado);

	}

	public void delete(Almoxarifado almoxarifado) {
		almoxarifadoRepository.delete(almoxarifado);
	}
}

O @Autowired não é necessário quando os objetos injetados são declarados como final.

2 curtidas

A estrutura parece estar certa aparentemente, já tentou fazer um outro projeto simples só pra testar seguindo a mesma ideia de estrutura?

@Jonathan_Medeiros

é o que acabei de fazer, e estranhamente, agora não da erro nenhum

mas obg por sua atenção, estranho rodar de uma forma, e de outra não…mas fazer oq…rs

vlw

1 curtida