Download - Conhecendo CDI
![Page 2: Conhecendo CDI](https://reader031.vdocuments.com.br/reader031/viewer/2022020105/554c0d4bb4c9058e098b58cd/html5/thumbnails/2.jpg)
Daniel Cunha
soro - irc.freenode.nethttp://danielsoro.com.br
http://github.com/danielsorohttp://twitter.com/[email protected]
![Page 3: Conhecendo CDI](https://reader031.vdocuments.com.br/reader031/viewer/2022020105/554c0d4bb4c9058e098b58cd/html5/thumbnails/3.jpg)
O que é e pra que serve o CDI?
![Page 4: Conhecendo CDI](https://reader031.vdocuments.com.br/reader031/viewer/2022020105/554c0d4bb4c9058e098b58cd/html5/thumbnails/4.jpg)
Iniciando com CDI
![Page 5: Conhecendo CDI](https://reader031.vdocuments.com.br/reader031/viewer/2022020105/554c0d4bb4c9058e098b58cd/html5/thumbnails/5.jpg)
<beans xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/beans_1_1.xsd" version="1.1" bean-discovery-mode="all"></beans>
beans.xml
![Page 6: Conhecendo CDI](https://reader031.vdocuments.com.br/reader031/viewer/2022020105/554c0d4bb4c9058e098b58cd/html5/thumbnails/6.jpg)
Injetando suas dependências
![Page 7: Conhecendo CDI](https://reader031.vdocuments.com.br/reader031/viewer/2022020105/554c0d4bb4c9058e098b58cd/html5/thumbnails/7.jpg)
![Page 8: Conhecendo CDI](https://reader031.vdocuments.com.br/reader031/viewer/2022020105/554c0d4bb4c9058e098b58cd/html5/thumbnails/8.jpg)
@
![Page 9: Conhecendo CDI](https://reader031.vdocuments.com.br/reader031/viewer/2022020105/554c0d4bb4c9058e098b58cd/html5/thumbnails/9.jpg)
Inject
![Page 10: Conhecendo CDI](https://reader031.vdocuments.com.br/reader031/viewer/2022020105/554c0d4bb4c9058e098b58cd/html5/thumbnails/10.jpg)
E quando eu tenho mais de uma
implementação?
![Page 11: Conhecendo CDI](https://reader031.vdocuments.com.br/reader031/viewer/2022020105/554c0d4bb4c9058e098b58cd/html5/thumbnails/11.jpg)
Qualifiers
![Page 12: Conhecendo CDI](https://reader031.vdocuments.com.br/reader031/viewer/2022020105/554c0d4bb4c9058e098b58cd/html5/thumbnails/12.jpg)
Alternatives
![Page 13: Conhecendo CDI](https://reader031.vdocuments.com.br/reader031/viewer/2022020105/554c0d4bb4c9058e098b58cd/html5/thumbnails/13.jpg)
Alternatives<beans xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/beans_1_1.xsd" version="1.1" bean-discovery-mode="all"> <alternatives> <class>package.RelaxedItemValdidator</class> </alternatives></beans>
![Page 14: Conhecendo CDI](https://reader031.vdocuments.com.br/reader031/viewer/2022020105/554c0d4bb4c9058e098b58cd/html5/thumbnails/14.jpg)
@
![Page 15: Conhecendo CDI](https://reader031.vdocuments.com.br/reader031/viewer/2022020105/554c0d4bb4c9058e098b58cd/html5/thumbnails/15.jpg)
PriorityInterceptor.Priority.PLATFORM_BEFORE = 0Interceptor.Priority.LIBRARY_BEFORE = 1000Interceptor.Priority.APPLICATION = 2000Interceptor.Priority.LIBRARY_AFTER = 3000Interceptor.Priority.PLATFORM_AFTER = 4000
![Page 16: Conhecendo CDI](https://reader031.vdocuments.com.br/reader031/viewer/2022020105/554c0d4bb4c9058e098b58cd/html5/thumbnails/16.jpg)
E quando eu quiser dar nome ao meu
bean?
![Page 17: Conhecendo CDI](https://reader031.vdocuments.com.br/reader031/viewer/2022020105/554c0d4bb4c9058e098b58cd/html5/thumbnails/17.jpg)
@Inject @Named("user.name") private String userName;
![Page 18: Conhecendo CDI](https://reader031.vdocuments.com.br/reader031/viewer/2022020105/554c0d4bb4c9058e098b58cd/html5/thumbnails/18.jpg)
E quando eu quiser evoluir o meu bean?
![Page 19: Conhecendo CDI](https://reader031.vdocuments.com.br/reader031/viewer/2022020105/554c0d4bb4c9058e098b58cd/html5/thumbnails/19.jpg)
@Specializespublic class ClasseFilha extends ClasseMae {}
![Page 20: Conhecendo CDI](https://reader031.vdocuments.com.br/reader031/viewer/2022020105/554c0d4bb4c9058e098b58cd/html5/thumbnails/20.jpg)
@Specializes @Cejugpublic class ClasseFilha extends ClasseMae {}
![Page 21: Conhecendo CDI](https://reader031.vdocuments.com.br/reader031/viewer/2022020105/554c0d4bb4c9058e098b58cd/html5/thumbnails/21.jpg)
@RequestScope @Ivia @Named(“mae”)public class ClasseMae
@Specializes @Cejug public class ClasseFilha extends ClasseMae {}
![Page 22: Conhecendo CDI](https://reader031.vdocuments.com.br/reader031/viewer/2022020105/554c0d4bb4c9058e098b58cd/html5/thumbnails/22.jpg)
@RequestScope @Ivia @Named(“mae”)public class ClasseMae
@Specializes @Cejug @Named(“filha”)public class ClasseFilha extends ClasseMae {}
![Page 23: Conhecendo CDI](https://reader031.vdocuments.com.br/reader031/viewer/2022020105/554c0d4bb4c9058e098b58cd/html5/thumbnails/23.jpg)
Tenho outra forma de evitar ambiguidade?
![Page 24: Conhecendo CDI](https://reader031.vdocuments.com.br/reader031/viewer/2022020105/554c0d4bb4c9058e098b58cd/html5/thumbnails/24.jpg)
@Typed({Cejug.class,GUJavaSC.class})public class BrazilJugs extends Jugs {}
![Page 25: Conhecendo CDI](https://reader031.vdocuments.com.br/reader031/viewer/2022020105/554c0d4bb4c9058e098b58cd/html5/thumbnails/25.jpg)
E quando eu quiser injetar uma classe que não é um bean CDI?
![Page 26: Conhecendo CDI](https://reader031.vdocuments.com.br/reader031/viewer/2022020105/554c0d4bb4c9058e098b58cd/html5/thumbnails/26.jpg)
import javax.enterprise.inject.Produces;public class Produtor {
@Producespublic Logger criarLogger(){
return LoggerFactory.getLogger(ConhecendoCDI.class);}
}
![Page 27: Conhecendo CDI](https://reader031.vdocuments.com.br/reader031/viewer/2022020105/554c0d4bb4c9058e098b58cd/html5/thumbnails/27.jpg)
E quando eu quiser finalizar esse bean?
![Page 28: Conhecendo CDI](https://reader031.vdocuments.com.br/reader031/viewer/2022020105/554c0d4bb4c9058e098b58cd/html5/thumbnails/28.jpg)
import javax.enterprise.inject.Disposes;public class Produtor {@Produces @CejugDB
public EntityManager criaEntityManager(){EntityManagerFactory emf = Persistence.
createEntityManagerFactory("cejugdb");return emf.createEntityManager();
}
public void fechaEntityManager(@Dispose @CejugDB EntityManager em){
em.close();}
}
![Page 29: Conhecendo CDI](https://reader031.vdocuments.com.br/reader031/viewer/2022020105/554c0d4bb4c9058e098b58cd/html5/thumbnails/29.jpg)
Criações mais flexiveis
![Page 30: Conhecendo CDI](https://reader031.vdocuments.com.br/reader031/viewer/2022020105/554c0d4bb4c9058e098b58cd/html5/thumbnails/30.jpg)
import javax.enterprise.inject.Produces;public class Produtor {
@Producespublic Logger criarLogger(InjectPoint injectPoint){
return LoggerFactory.getLogger(injectPoint.getMember().getDeclaringClass().getName());
}}
![Page 31: Conhecendo CDI](https://reader031.vdocuments.com.br/reader031/viewer/2022020105/554c0d4bb4c9058e098b58cd/html5/thumbnails/31.jpg)
Escopos CDI
![Page 32: Conhecendo CDI](https://reader031.vdocuments.com.br/reader031/viewer/2022020105/554c0d4bb4c9058e098b58cd/html5/thumbnails/32.jpg)
@RequestScoped@SessionScoped@ApplicationScoped@ConversationScoped@Dependent
![Page 33: Conhecendo CDI](https://reader031.vdocuments.com.br/reader031/viewer/2022020105/554c0d4bb4c9058e098b58cd/html5/thumbnails/33.jpg)
Quero interceptar.. Como eu faço?
![Page 34: Conhecendo CDI](https://reader031.vdocuments.com.br/reader031/viewer/2022020105/554c0d4bb4c9058e098b58cd/html5/thumbnails/34.jpg)
@Interceptor @Priority(Interceptor.Priority.APPLICATION)public class Auditor {}
![Page 35: Conhecendo CDI](https://reader031.vdocuments.com.br/reader031/viewer/2022020105/554c0d4bb4c9058e098b58cd/html5/thumbnails/35.jpg)
Posso escolher quem interceptar?
![Page 36: Conhecendo CDI](https://reader031.vdocuments.com.br/reader031/viewer/2022020105/554c0d4bb4c9058e098b58cd/html5/thumbnails/36.jpg)
@Retention(RetentionPolicy.RUNTIME)@Target({ElementType.TYPE, ElementType.METHOD})@InterceptorBindingpublic @interface Auditavel {}
![Page 37: Conhecendo CDI](https://reader031.vdocuments.com.br/reader031/viewer/2022020105/554c0d4bb4c9058e098b58cd/html5/thumbnails/37.jpg)
@Retention(RetentionPolicy.RUNTIME)@Target({ElementType.TYPE, ElementType.METHOD})@Inherited@InterceptorBindingpublic @interface Auditavel {}
![Page 38: Conhecendo CDI](https://reader031.vdocuments.com.br/reader031/viewer/2022020105/554c0d4bb4c9058e098b58cd/html5/thumbnails/38.jpg)
Interceptando o ciclo de vida
![Page 39: Conhecendo CDI](https://reader031.vdocuments.com.br/reader031/viewer/2022020105/554c0d4bb4c9058e098b58cd/html5/thumbnails/39.jpg)
@AroundConstruct@PostConstruct@PreDestroy
![Page 40: Conhecendo CDI](https://reader031.vdocuments.com.br/reader031/viewer/2022020105/554c0d4bb4c9058e098b58cd/html5/thumbnails/40.jpg)
Decorando o nosso bean
![Page 41: Conhecendo CDI](https://reader031.vdocuments.com.br/reader031/viewer/2022020105/554c0d4bb4c9058e098b58cd/html5/thumbnails/41.jpg)
@Decoratorpublic abstract class CoderDecorator implements Coder { @Inject @Delegate @Any Coder coder; public String codeString(String s, int tval) { int len = s.length(); return coder.codeString(s, tval); }}
![Page 42: Conhecendo CDI](https://reader031.vdocuments.com.br/reader031/viewer/2022020105/554c0d4bb4c9058e098b58cd/html5/thumbnails/42.jpg)
Decorator<beans xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/beans_1_1.xsd" version="1.1" bean-discovery-mode="all"> <decorators> <class>decorators.CoderDecorator</class> </decorators></beans>
![Page 43: Conhecendo CDI](https://reader031.vdocuments.com.br/reader031/viewer/2022020105/554c0d4bb4c9058e098b58cd/html5/thumbnails/43.jpg)
Preciso replicar as 30 annotation da classe X na Y… e agora?
![Page 44: Conhecendo CDI](https://reader031.vdocuments.com.br/reader031/viewer/2022020105/554c0d4bb4c9058e098b58cd/html5/thumbnails/44.jpg)
@Stereotype
![Page 45: Conhecendo CDI](https://reader031.vdocuments.com.br/reader031/viewer/2022020105/554c0d4bb4c9058e098b58cd/html5/thumbnails/45.jpg)
import javax.enterprise.inject.Stereotype;
@Stereotype@Named @RequestScoped@Auditavel @Rastreavel@Retention(RetentionPolicy.RUNTIME)@Target(ElementType.TYPE)public @interface CejugStereotype {}
![Page 46: Conhecendo CDI](https://reader031.vdocuments.com.br/reader031/viewer/2022020105/554c0d4bb4c9058e098b58cd/html5/thumbnails/46.jpg)
Diminuindo acoplamento
![Page 47: Conhecendo CDI](https://reader031.vdocuments.com.br/reader031/viewer/2022020105/554c0d4bb4c9058e098b58cd/html5/thumbnails/47.jpg)
@Injectprivate Event<Palestrante> eventoCejug;
![Page 48: Conhecendo CDI](https://reader031.vdocuments.com.br/reader031/viewer/2022020105/554c0d4bb4c9058e098b58cd/html5/thumbnails/48.jpg)
eventoCejug.fire(palestrante);
![Page 49: Conhecendo CDI](https://reader031.vdocuments.com.br/reader031/viewer/2022020105/554c0d4bb4c9058e098b58cd/html5/thumbnails/49.jpg)
public void adicionarPalestrante(@Observes Palestrante palestrante){}
![Page 50: Conhecendo CDI](https://reader031.vdocuments.com.br/reader031/viewer/2022020105/554c0d4bb4c9058e098b58cd/html5/thumbnails/50.jpg)
E eu posso fazer chamadas assíncronas?
![Page 51: Conhecendo CDI](https://reader031.vdocuments.com.br/reader031/viewer/2022020105/554c0d4bb4c9058e098b58cd/html5/thumbnails/51.jpg)
@Asynchronouspublic void adicionarPalestrante(@Observes Palestrante palestrante){}
![Page 52: Conhecendo CDI](https://reader031.vdocuments.com.br/reader031/viewer/2022020105/554c0d4bb4c9058e098b58cd/html5/thumbnails/52.jpg)
Dúvidas?
![Page 53: Conhecendo CDI](https://reader031.vdocuments.com.br/reader031/viewer/2022020105/554c0d4bb4c9058e098b58cd/html5/thumbnails/53.jpg)
Obrigado