DEV Community

Mattheus Cassundé
Mattheus Cassundé

Posted on

1

Injeção de dependência Dinâmica

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;

Enter fullscreen mode Exit fullscreen mode

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

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

private Payment payment;
Enter fullscreen mode Exit fullscreen mode

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();

}
Enter fullscreen mode Exit fullscreen mode

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

Ficamos por aqui hoje... até a próxima

Postmark Image

Speedy emails, satisfied customers

Are delayed transactional emails costing you user satisfaction? Postmark delivers your emails almost instantly, keeping your customers happy and connected.

Sign up

Top comments (0)

A Workflow Copilot. Tailored to You.

Pieces.app image

Our desktop app, with its intelligent copilot, streamlines coding by generating snippets, extracting code from screenshots, and accelerating problem-solving.

Read the docs

👋 Kindness is contagious

Please leave a ❤️ or a friendly comment on this post if you found it helpful!

Okay