• Share
  • Email
  • Embed
  • Like
  • Save
  • Private Content
[Java] Contexts and Dependency Injection em JEE6
 

[Java] Contexts and Dependency Injection em JEE6

on

  • 928 views

Context and Dependecy Injection - CDI - uma introdução

Context and Dependecy Injection - CDI - uma introdução

Statistics

Views

Total Views
928
Views on SlideShare
928
Embed Views
0

Actions

Likes
0
Downloads
15
Comments
0

0 Embeds 0

No embeds

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

CC Attribution-NonCommercial LicenseCC Attribution-NonCommercial License

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

    [Java] Contexts and Dependency Injection em JEE6 [Java] Contexts and Dependency Injection em JEE6 Presentation Transcript

    • CDIContexts and Dependency Injection emJEE6José Naves Moura Neto - josenaves@gmail.comhttp://josenaves.com - @josenavesCódigo em https://github.com/josenaves/cdiDemo
    • CDIO que é?O que é?Especificação do mecanismo que gerenciaciclo de vida e dependências entre beans(servlets, EJBs, POJOs, JSF Managed Beans).Introduzido no JEE6 (JSR-299).
    • CDIHabilitandoPara habilitar: Criar um arquivo beans.xml no diretório META-INF da aplicação.
    • CDIFuncionamentoComo funciona:1. Durante o deploy, se o servidor de aplicações encontrar o arquivo beans.xml, será criado um contexto CDI.2. Todas as classes com anotações CDI (@Named - javax.inject.Named) serão registradas.3. Estes beans serão instanciados e injetados de acordo com suas dependências
    • CDI@Named javax.inject.Named
    • CDI@NamedRegistra uma classe no container CDI.Instâncias serão criadas para cada anotação@Injected encontrada.@Namedpublic class ClientService { ...}
    • CDI@Inject javax.inject.Inject
    • CDI@InjectAssinala o container CDI a gerar novasinstâncias da classe anotada para injetar nocampo, construtor ou setter.public class Client { @Inject private ClientService clientService; private Account accout; // public Client(@Inject Account account) { this.account = account; } public void setAccount(@Inject Account account) { this.account = account; }}
    • CDI@Qualifier javax.inject.Qualifier
    • CDI@QualifierAnotação usada para criar uma anotações queserão usadas para diferenciar um tipo de outro.@Qualifierpublic @interface PreferedDao{}@PreferedDaopublic class OracleDao implements Dao { ... }public class MongoDao implements Dao { ... }public class MyService { @PreferedDao @Injected private dao; }
    • CDI@Alternative javax.enterprise.Alternative
    • CDI@AlternativeDesabilita classes de serem injetadas e evitaproblemas de ambiguidades durante odeployment.A classe a ser utilizada para injeção deve sermarcada no arquivo beans.xml (tag<alternatives>).
    • CDI@PostConstruct javax.annotation.PostConstruct
    • CDI@PostConstructAnota um método que será chamado pelocontainer quando o bean for instanciado etodas suas dependências forem injetadas.public class ClientService { @PostConstruct private void init() { // abre conexão TCP com Mainframe logger.info("ClientService operacional"); }}
    • CDI@PreDestroy javax.annotation.PreDestroy
    • CDI@PreDestroyAnota um método que será chamado pelocontainer quando o bean estiver no ponto deser descartado.public class ClientService { ... @PreDestroy private void destroy() { // fecha conexão TCP com Mainframe logger.info("ClientService desativado."); }}
    • CDI@Observes javax.enterprise.event.Observes
    • CDI@ObservesPOJOs agora podem produzir e consumireventos.Definindo um eventopublic class Auth { @Inject Event<Login> loginEvent; ... public void auth() { ... if (success) { loginEvent.fire(login); } }}
    • CDI@ObservesTratando um eventopublic class Monitor { ... public void onLogin( @Observes Login login) { // grava em arquivo de log o login bem sucedido logger.info("Usuario " + login.username + " entrou no sistema."); }}
    • CDI@Interceptor javax.interceptor.Interceptor
    • CDI@InterceptorJEE também traz suporte a Interceptors paraPOJOs.Para usar, é necessário criar uma anotaçãocom @InterceptorBinding.@InterceptorBinding@Target ({TYPE, METHOD}) @Retention(RUNTIME)public @interface Log{}Dessa maneira, toda classe que tiver aanotação @Log será interceptada.
    • CDI@InterceptorDepois, é necessário fazer a implementação dointerceptor propriamente dito.@Interceptor@Logpublic class LogInterceptor { @AroundInvoke public Object logMethod(InvocationContext ctx) throws Exception { logger.info("Entrando no método:" + ctx.getMethod().getName()); return ctx.proceed(); }}
    • CDI@InterceptorÉ necessário também habilitar o interceptor noarquivo beans.xml.<beans> <interceptors> <class>br.com.oi.interceptor.LogInterceptor</class> </interceptors></beans>Podemos ter vários interceptors ativos noprojeto. A ordem em que os interceptors sãodefinidos é importante!
    • CDI@InterceptorPronto! Agora toda classe que estiver anotadacom @Log, logará a chamada do métodoautomaticamente.@Logpublic class QueroLogar { public void metodo() { System.out.println("Teste"); }}
    • CDIPrincipais anotaçõesResumindo: @Named @Inject @Qualifier @Alternative @PostConstruct @PreDestroy @Observes @Interceptor
    • CDIRecursos● Java EE Managed Bean Specification http://jcp.org/en/jsr/detail?id=316● Série de tutoriais JEE2 CDI de Andy Gibson no site do Netbeans http://netbeans.org/kb/docs/javaee/cdi-intro.html● Weld - implementação de referência da especificação JSR-299 http://sfwk.org/Weld
    • CDILivros
    • CDIThe End