O documento descreve como utilizar CDI (Contexts and Dependency Injection) em projetos Java para injeção de dependências, gerenciamento do ciclo de vida de objetos e desacoplamento de classes. CDI permite especificar dependências usando anotações como @Inject e @Produces e controla a criação e injeção desses objetos.
24. public class ProdutoController {
private ProdutoDao dao;
public void insere() {
Produto produto = // pega dados no request
dao.salvar(produto);
}
}
25. public class ProdutoController {
@Inject
private ProdutoDao dao;
public void insere() {
Produto produto = // pega dados no request
dao.salvar(produto);
}
}
46. public class JPAUtil {
@Produces @ApplicationScoped
public EntityManagerFactory criaFactory1() {}
@Produces @RequestScoped
public EntityManager criaEM1(EntityManagerFactory factory){}
}
47. public class JPAUtil {
@Produces @ApplicationScoped
public EntityManagerFactory criaFactory1() {}
@Produces @RequestScoped
public EntityManager criaEM1(EntityManagerFactory factory){}
@Produces @ApplicationScoped
public EntityManagerFactory criaFactory2() {}
@Produces @RequestScoped
public EntityManager criaEM2(EntityManagerFactory factory){}
}
48. public class JPAUtil {
@Produces @ApplicationScoped
public EntityManagerFactory criaFactory1() {}
@Produces @RequestScoped
public EntityManager criaEM1(EntityManagerFactory factory){}
@Produces @ApplicationScoped
public EntityManagerFactory criaFactory2() {}
@Produces @RequestScoped
?
public EntityManager criaEM2(EntityManagerFactory factory){}
}
50. public class JPAUtil {
@Produces @ApplicationScoped @Geral
public EntityManagerFactory criaFactory1() {}
@Produces @RequestScoped
public EntityManager criaEM1(EntityManagerFactory factory){}
@Produces @ApplicationScoped @Diretor
public EntityManagerFactory criaFactory2() {}
@Produces @RequestScoped
public EntityManager criaEM2(EntityManagerFactory factory){}
}
51. public class JPAUtil {
@Produces @ApplicationScoped @Geral
public EntityManagerFactory criaFactory1() {}
@Produces @RequestScoped
public EntityManager criaEM1(@Geral EntityManagerFactory f){
@Produces @ApplicationScoped @Diretor
public EntityManagerFactory criaFactory2() {}
@Produces @RequestScoped
public EntityManager criaEM2(@Diretor EntityManagerFactory f
}
58. public class BackupDeTudo {
@Inject @Any
private Instance<EntityManager> todosEntityMangers;
public void backupBDs() {
}
}
59. public class BackupDeTudo {
@Inject @Any
private Instance<EntityManager> todosEntityMangers;
public void backupBDs() {
for (EntityManager em : todosEntityMangers) {
// ...
}
}
}
72. @Interceptor @Transacional
public class TransacionalInterceptor {
@AroundInvoke
public Object intercept(InvocationContext ctx) {
// ... antes da lógica
Object resultado = ctx.proceed();
// ... depois da lógica
return resultado;
}
}
73. @Interceptor @Transacional
public class TransacionalInterceptor {
@Inject private EntityManager em;
@AroundInvoke
public Object intercept(InvocationContext ctx) {
em.getTransaction().begin();
Object resultado = ctx.proceed();
em.getTransaction().commit();
return resultado;
}
}
88. public class FinalizaCompraController {
@Inject @Any
private Event<Compra> eventoCompra;
public void finalizaCompra() {
Compra compra = new Compra(produto, cliente);
}
}
89. public class FinalizaCompraController {
@Inject @Any
private Event<Compra> eventoCompra;
public void finalizaCompra() {
Compra compra = new Compra(produto, cliente);
eventoCompra.fire(compra);
}
}
90. public class Pagamento {
public void efetuaCobranca(Compra c) {
// ... comunica com Cielo
}
}
91. public class Pagamento {
public void efetuaCobranca(@Observes Compra c) {
// ... comunica com Cielo
}
}
92. public class Pagamento {
public void efetuaCobranca(@Observes Compra c) {
// ... comunica com Cielo
}
}
public class Estoque {
public void reservaMercadoria(@Observes Compra c)
// ... reserva produto no estoque
}
}
98. public class PagamentoDeVerdade {
public void efetuaCobranca(@Observes Compra c) {
}
}
public class PagamentoDeMentira {
public void efetuaCobranca(@Observes Compra c) {
}
}
99. public class PagamentoDeVerdade {
public void efetuaCobranca(@Observes Compra c) {
WebServiceCielo.cobraDeVerdade(c.getCartao());
}
}
public class PagamentoDeMentira {
public void efetuaCobranca(@Observes Compra c) {
LogDeTeste.fariaUmaCompraAqui();
}
}
100. public class PagamentoDeVerdade implements Pagamento {
public void efetuaCobranca(@Observes Compra c) {
WebServiceCielo.cobraDeVerdade(c.getCartao());
}
}
public class PagamentoDeMentira implements Pagamento {
public void efetuaCobranca(@Observes Compra c) {
LogDeTeste.fariaUmaCompraAqui();
}
}
101. public class PagamentoDeVerdade implements Pagamento {
public void efetuaCobranca(@Observes Compra c) {
WebServiceCielo.cobraDeVerdade(c.getCartao());
}
}
@Alternative
public class PagamentoDeMentira implements Pagamento {
public void efetuaCobranca(@Observes Compra c) {
LogDeTeste.fariaUmaCompraAqui();
}
}