54
Conhecendo CDI Daniel Cunha (soro) [email protected] http://www.danielsoro.com.br CDI 1.1 - JSR 346

Conhecendo CDI

Embed Size (px)

Citation preview

Page 1: Conhecendo CDI

Conhecendo CDIDaniel Cunha (soro)[email protected] http://www.danielsoro.com.br

CDI 1.1 - JSR 346

Page 3: Conhecendo CDI

O que é e pra que serve o CDI?

Page 4: Conhecendo CDI

Iniciando com CDI

Page 5: Conhecendo CDI

<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

Injetando suas dependências

Page 7: Conhecendo CDI
Page 8: Conhecendo CDI

@

Page 9: Conhecendo CDI

Inject

Page 10: Conhecendo CDI

E quando eu tenho mais de uma

implementação?

Page 11: Conhecendo CDI

Qualifiers

Page 12: Conhecendo CDI

Alternatives

Page 13: Conhecendo CDI

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

@

Page 15: Conhecendo CDI

PriorityInterceptor.Priority.PLATFORM_BEFORE = 0Interceptor.Priority.LIBRARY_BEFORE = 1000Interceptor.Priority.APPLICATION = 2000Interceptor.Priority.LIBRARY_AFTER = 3000Interceptor.Priority.PLATFORM_AFTER = 4000

Page 16: Conhecendo CDI

E quando eu quiser dar nome ao meu

bean?

Page 17: Conhecendo CDI

@Inject @Named("user.name") private String userName;

Page 18: Conhecendo CDI

E quando eu quiser evoluir o meu bean?

Page 19: Conhecendo CDI

@Specializespublic class ClasseFilha extends ClasseMae {}

Page 20: Conhecendo CDI

@Specializes @Cejugpublic class ClasseFilha extends ClasseMae {}

Page 21: Conhecendo CDI

@RequestScope @Ivia @Named(“mae”)public class ClasseMae

@Specializes @Cejug public class ClasseFilha extends ClasseMae {}

Page 22: Conhecendo CDI

@RequestScope @Ivia @Named(“mae”)public class ClasseMae

@Specializes @Cejug @Named(“filha”)public class ClasseFilha extends ClasseMae {}

Page 23: Conhecendo CDI

Tenho outra forma de evitar ambiguidade?

Page 24: Conhecendo CDI

@Typed({Cejug.class,GUJavaSC.class})public class BrazilJugs extends Jugs {}

Page 25: Conhecendo CDI

E quando eu quiser injetar uma classe que não é um bean CDI?

Page 26: Conhecendo CDI

import javax.enterprise.inject.Produces;public class Produtor {

@Producespublic Logger criarLogger(){

return LoggerFactory.getLogger(ConhecendoCDI.class);}

}

Page 27: Conhecendo CDI

E quando eu quiser finalizar esse bean?

Page 28: Conhecendo CDI

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

Criações mais flexiveis

Page 30: Conhecendo CDI

import javax.enterprise.inject.Produces;public class Produtor {

@Producespublic Logger criarLogger(InjectPoint injectPoint){

return LoggerFactory.getLogger(injectPoint.getMember().getDeclaringClass().getName());

}}

Page 31: Conhecendo CDI

Escopos CDI

Page 32: Conhecendo CDI

@RequestScoped@SessionScoped@ApplicationScoped@ConversationScoped@Dependent

Page 33: Conhecendo CDI

Quero interceptar.. Como eu faço?

Page 34: Conhecendo CDI

@Interceptor @Priority(Interceptor.Priority.APPLICATION)public class Auditor {}

Page 35: Conhecendo CDI

Posso escolher quem interceptar?

Page 36: Conhecendo CDI

@Retention(RetentionPolicy.RUNTIME)@Target({ElementType.TYPE, ElementType.METHOD})@InterceptorBindingpublic @interface Auditavel {}

Page 37: Conhecendo CDI

@Retention(RetentionPolicy.RUNTIME)@Target({ElementType.TYPE, ElementType.METHOD})@Inherited@InterceptorBindingpublic @interface Auditavel {}

Page 38: Conhecendo CDI

Interceptando o ciclo de vida

Page 39: Conhecendo CDI

@AroundConstruct@PostConstruct@PreDestroy

Page 40: Conhecendo CDI

Decorando o nosso bean

Page 41: Conhecendo CDI

@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

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

Preciso replicar as 30 annotation da classe X na Y… e agora?

Page 44: Conhecendo CDI

@Stereotype

Page 45: Conhecendo CDI

import javax.enterprise.inject.Stereotype;

@Stereotype@Named @RequestScoped@Auditavel @Rastreavel@Retention(RetentionPolicy.RUNTIME)@Target(ElementType.TYPE)public @interface CejugStereotype {}

Page 46: Conhecendo CDI

Diminuindo acoplamento

Page 47: Conhecendo CDI

@Injectprivate Event<Palestrante> eventoCejug;

Page 48: Conhecendo CDI

eventoCejug.fire(palestrante);

Page 49: Conhecendo CDI

public void adicionarPalestrante(@Observes Palestrante palestrante){}

Page 50: Conhecendo CDI

E eu posso fazer chamadas assíncronas?

Page 51: Conhecendo CDI

@Asynchronouspublic void adicionarPalestrante(@Observes Palestrante palestrante){}

Page 52: Conhecendo CDI

Dúvidas?

Page 53: Conhecendo CDI

Obrigado

Page 54: Conhecendo CDI

Conhecendo CDIDaniel Cunha (soro)[email protected] http://www.danielsoro.com.br

CDI 1.1 - JSR 346