Hoje vou falar um pouco sobre injeção de dependência sob demanda.

E comum encontrarmos beans ou controllers ou qualquer outra classe com várias injeções de dependências e na maioria das vezes uma boa parte dessas injeções são usadas em momentos pontuais da rotina.

Quando a classe que contém esses injects e instanciada, a CDI vai se virar para criar e disponibilizar todas as suas dependências, já imaginou se em cada uma das dependências existir uma lógica no seu construtor? talvez possa resultar em perca de performance.

Vamos ver na prática:

na forma tradicional seria mais ou menos assim:

@inject
private Payment payment;

Para implementar a injeção sob demanda e bem simples

@inject
@any
private Instance<Payment> paymentInstance; testess

private Payment payment;

Se observar estamos usando o objeto Instance para “segurar” as injeções, para que possamos obter a implementação de forma mais simples e rápida, passamos por parâmetro a interface.

e no momento em que precisarmos dessa dependência a chamamos da seguinte forma:

if( condition ){

this.payment = paymentInstance.select(SuaImplementacao.class).get();

}

será apenas nesse momento em que a injeção e efetivamente será executada.

Ficamos por aqui hoje… até a próxima


Curtiu ? Me segue nas redes 😉