1
resposta

Servlet e EJB - Injeção de dependência

Tenho um Controlador de requisições feito em Servlet. Esse controlador chama classes que realiza o tratamento das ações como um Controller. (Modelo do curso de Servlet). Estou tentando adicionar uma injeção de um DAO que já funciona. A injeção ocorre normalmente no atributo DAO dentro do filtro, mas quando instancio dinamicamente a classe controller através de reflexão ( Class.. newInstance() ) não é injetado.

1 resposta

Olá Márcio, tudo bem?

A injeção de dependência é uma técnica muito útil para facilitar o gerenciamento de dependências em um projeto. No entanto, é importante entender que a injeção de dependência não funciona automaticamente quando você instancia uma classe dinamicamente usando reflexão.

Quando você utiliza a reflexão para instanciar uma classe, o framework de injeção de dependência não tem conhecimento dessa instanciação e, portanto, não consegue realizar a injeção dos objetos necessários.

Uma alternativa para resolver esse problema é utilizar um framework de injeção de dependência, como o Spring Framework, que é capaz de realizar a injeção mesmo em classes instanciadas dinamicamente. Com o Spring, você pode utilizar a anotação @Autowired para indicar que um determinado atributo precisa ser injetado.

Por exemplo, suponha que você tenha uma classe Controller com um atributo DAO que precisa ser injetado. Você pode fazer o seguinte:

@Controller
public class MeuController {
    @Autowired
    private MeuDAO dao;
    
    // Restante do código...
}

Dessa forma, o Spring irá injetar automaticamente uma instância do MeuDAO no atributo dao da classe MeuController, mesmo que você instancie a classe dinamicamente usando reflexão.

Espero ter ajudado a esclarecer sua dúvida! Se tiver mais alguma pergunta, estou à disposição. Bons estudos!