Injeção de dependência com Spring Boot

3 respostas Resolvido
java
D

Tenho uma interface de um controlador JSF, com a seguinte estrutura

import java.util.List;
import javax.faces.event.ActionEvent;

public interface Controller<E> {
	
	void listar();	
	List<E> getLista();
	void novo();
	void salvar();
	void editar(ActionEvent evento);
	void excluir(ActionEvent evento);
	
}

Tenho 2 classes implementando essa interface, onde se faz uso de Repository, exemplo:

public class Controller1Impl implements Controller<Teste> {
     @Autowired
     private RepositoryExemplo exemplo;
}

public class Controller2Impl implements Controller<Teste> {
     @Autowired
     private RepositoryExemplo exemplo;
}

Estou usando o JoinFaces e tenho um controlador, da seguinte forma:

@Named
@ViewScoped
public class Controlador {

    private Controller<?> controller;

	@PostConstruct
	public void init() {
            controller = new Controller1Impl();
        }
}

Dependendo do parâmetro que recebo pelo URL, instancio o Controller1Impl ou Controller2Impl, o problema é que os repository do objeto Controller1Impl ou Controller2Impl ficam null, como devo fazer para injetar corretamente no objeto que instancio?

3 Respostas

D
Solucao aceita

Injeção de dependência funciona em conjunto.

Você dar new em uma classe e esperar que ela injete as dependencias é querer d+.

Sou controller também precisa ser injetado.

L

O que o @DarkElf disse pode ser interpretado como:
Você não deve usar new nunca!
É melhor deixar as duas instâncias de controlelr injetadas e verificar qual utilizar, de acordo com o parâmetro recebido.

D

Para resolver as classes que implementam a interface com @Component, deixei @Autowired nos repository e injetei uma dependência das classes nos beans.

Obrigado!

Criado 5 de abril de 2017
Ultima resposta 5 de abr. de 2017
Respostas 3
Participantes 3