Injeção de dependência com Spring Boot

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?

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.

1 curtida

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.

1 curtida

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

Obrigado!