ebook img

CDI: Integre as dependências e contextos do seu código Java PDF

216 Pages·2014·6.88 MB·Portuguese
Save to my drive
Quick download
Download
Most books are stored in the elastic cloud where traffic is expensive. For this reason, we have a limit on daily download.

Preview CDI: Integre as dependências e contextos do seu código Java

© CasadoCódigo TodososdireitosreservadoseprotegidospelaLeinº9.610,de10/02/1998. Nenhumapartedestelivropoderáserreproduzida,nemtransmitida,semauto- rizaçãopréviaporescritodaeditora,sejamquaisforemosmeios: fotográficos, eletrônicos,mecânicos,gravaçãoouquaisqueroutros. CasadoCódigo Livrosparaoprogramador RuaVergueiro,3185-8ºandar 04101-300–VilaMariana–SãoPaulo–SP–Brasil CasadoCódigo Sumário Sumário 1 AntesdefalardeCDI... 1 1.1 Boaspráticasdeorientaçãoaobjetos . . . . . . . . . . . . . . . . . . . 2 1.2 Lidandocomoacoplamento . . . . . . . . . . . . . . . . . . . . . . . . 7 1.3 Evoluçãodasferramentasdegestãodedependência . . . . . . . . . . 11 1.4 Obomevelhoarquivoproperties . . . . . . . . . . . . . . . . . . . . . 11 1.5 BuscandoasdependênciascomSpringeXML . . . . . . . . . . . . . 14 1.6 BuscandoasdependênciascomSeameanotações . . . . . . . . . . . 17 1.7 Deondevimos? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19 2 OqueéeparaqueserveaCDI 21 2.1 Paraondevamos? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21 2.2 Evitandoqueacomplexidadedocódigosempreaumente . . . . . . . 21 2.3 Introduçãoàinjeçãodedependências . . . . . . . . . . . . . . . . . . 31 2.4 AmotivaçãodaCDI . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36 2.5 Oqueéeparaqueserveumaespecificação? . . . . . . . . . . . . . . . 36 2.6 ACDIésóparaJavaEEmesmo? . . . . . . . . . . . . . . . . . . . . . 38 3 IniciandoumprojetocomCDI 39 3.1 OláCDI . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39 3.2 OqueéumpacoteCDI? . . . . . . . . . . . . . . . . . . . . . . . . . . 47 3.3 Usandoinjeçãoempropriedades,construtoresemétodosinicializa- dores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48 3.4 Asformasdeseinjetardependências . . . . . . . . . . . . . . . . . . . 49 3.5 Recapitulando . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52 i Sumário CasadoCódigo 4 Resolvendodependênciascomtipagemforte 53 4.1 Lidandocomaambiguidadenasdependências . . . . . . . . . . . . . 54 4.2 Osqualificadores. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58 4.3 Alternatives:eliminandoambiguidadeetornandoumbeanopcional 65 4.4 Prioridade:novidadedaCDI1.1,partedoJavaEE7 . . . . . . . . . . 68 4.5 Beansnomeados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70 4.6 Trabalhandocomherançaentrebeans . . . . . . . . . . . . . . . . . . 72 4.7 Restringindootipodosbeans . . . . . . . . . . . . . . . . . . . . . . . 74 4.8 Resoluçãodedependênciasobdemandaelookupprogramático . . . 76 4.9 Resumodofuncionamentodaresoluçãodedependências . . . . . . . 80 5 OciclodevidadosobjetosgerenciadospelaCDI 83 5.1 Métodosprodutores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84 5.2 EscoposdaCDI . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89 5.3 Escopoderequisiçãocom@RequestScoped . . . . . . . . . . . . . . . 94 5.4 Escopodesessãocomo@SessionScoped. . . . . . . . . . . . . . . . . 97 5.5 @ApplicationScoped:Omaiorescopopossível . . . . . . . . . . . . . 99 5.6 @ConversationScoped:Vocêcriandoseupróprioescopo . . . . . . . 101 5.7 @Dependent:OescopopadrãodoCDI . . . . . . . . . . . . . . . . . 108 5.8 Métodosfinalizadores . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111 6 InterceptorseDecorators 113 6.1 Implementandorequisitostransversaiscominterceptors. . . . . . . . 113 6.2 Interceptadoresdeciclodevida . . . . . . . . . . . . . . . . . . . . . . 121 6.3 EstendendoumbeanexistentecomDecorators . . . . . . . . . . . . . 124 6.4 Vinculaçãodinâmicaentreoobjetodecoradoeseudecorador . . . . 126 7 DefinindoEstereótiposediminuindooacoplamentoutilizandoEventos 133 7.1 Definindoestereótipos . . . . . . . . . . . . . . . . . . . . . . . . . . . 134 7.2 UtilizandoEventosparaobterumbaixíssimoacoplamento . . . . . . 137 7.3 Observadoressíncronosdeeventos . . . . . . . . . . . . . . . . . . . . 141 7.4 Eventosequalificadores . . . . . . . . . . . . . . . . . . . . . . . . . . . 141 7.5 Observadoresassíncronosdeeventos . . . . . . . . . . . . . . . . . . . 146 7.6 Injetandodependênciasnosobservadores . . . . . . . . . . . . . . . . 148 ii CasadoCódigo Sumário 8 ArelaçãodaCDIcomasdemaisespecificaçõesJavaEE 151 8.1 RelaçãoentreCDIeEJB/JPA . . . . . . . . . . . . . . . . . . . . . . . . 152 8.2 RelaçãoentreCDIeJSF . . . . . . . . . . . . . . . . . . . . . . . . . . . 156 8.3 RelaçãoentreCDIeJMS . . . . . . . . . . . . . . . . . . . . . . . . . . 163 8.4 Empacotandoasmelhorias . . . . . . . . . . . . . . . . . . . . . . . . . 169 9 ExtensõesCDI 171 9.1 DoSeamàCDI. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 172 9.2 Extensõesportáveisdisponíveis . . . . . . . . . . . . . . . . . . . . . . 174 9.3 Criandonossasextensões . . . . . . . . . . . . . . . . . . . . . . . . . . 175 9.4 Extensãoportável:usandoconvençãoemvezdeconfiguração . . . . 177 9.5 Extensãonãoportável:eventosassíncronosforadoJavaEE . . . . . . 180 10 ExecutandoCDIemdiferentesambientes 189 10.1 ExecutandoCDIemservletcontainers . . . . . . . . . . . . . . . . . . 190 10.2 ExecutandoCDIapartirdeumaclassemain . . . . . . . . . . . . . . 193 10.3 EcomotestarumaaplicaçãoCDI? . . . . . . . . . . . . . . . . . . . . 195 10.4 Desenvolvendotestesdeintegraçãocompersistência. . . . . . . . . . 201 ÍndiceRemissivo 208 Versão:16.3.26 iii Capítulo1 Antes de falar de CDI... O assunto principal deste livro é a CDI, mas não iremos começar nossos estudos diretamentenela. Teremmãosumaboaferramentaémuitobom,porém,antesde utilizá-la,precisamosversobredesenvolvimentodesoftwarecomoumtodo.Mesmo quevocêsejaumprogramadorexperiente,valeapenarevisitartópicosimportantes comoesses.Atéporqueserexperientenãoésinônimodesabertudo. O bom desenvolvimento de software não é uma tarefa trivial. Equilibrar a ba- lançaquetem,deumlado,aaltacoesão,edeoutro,obaixoacoplamentoéalgoque setornamaissimplescomaexperiênciaeobservandobonscódigos. Nãoépossíveljustificaramáqualidadedeumsoftwarepelaquantidadedemu- danças que o mesmo precisou sofrer por alterações no negócio, ou simplesmente pormudançadeopiniãodocliente. Issovaiacontecer,ecabeanós,desenvolvedo- res, projetarmosnossasaplicaçõesdeformaaacomodardamelhorformapossível essasmudanças. Amenosqueosoftwarequeestivermosdesenvolvendosejaalgoparaumane- cessidade temporária, e não tenha um uso permanente, certamente ele mudará, e 1.1. Boaspráticasdeorientaçãoaobjetos CasadoCódigo nãoapenasumavez,ecomissoalgumaspartesdeleirãosofrercomessamudança. Podeseratéque,dependendodaurgência,aparteafetadapelamudançapreciseser melhoradadepois,masnãopodemosdeixarqueesseefeitosejapropagadoparatoda aaplicação. Tomemos como exemplo uma aplicação que controle tudo relacionado aos re- cursoshumanosdeumaempresa,desdeocadastrodetalhadodosdadosdosfuncio- náriosatéafolhadepagamento.Agoravamosconsiderarumamudançadelegislação quenosobrigueamudaraformacomoafolhadepagamentoécalculada,eessaseja simplesmenteapartemaiscomplexadetodoosistema,umavezquealémdosalário de cada funcionário, é preciso também calcular todos os impostos e descontos de planodesaúde,empréstimoscomdescontoemfolhaetudomais. Nesse cenário, é possível argumentar que a mudança é inviável por mexer no cerne do sistema? Obviamente, não. Então nosso sistema precisa ser resiliente, ou seja,suportarbemasmudanças. No cenário apresentado, a mudança de todo o cálculo da folha de pagamento provavelmentenãoseráapiorpartedotrabalho. Geralmenteaequipesabeprogra- mar,escrevercódigo,econsequentementevaisaberpassarparaaIDEasalterações nalegislação.Apiorpartecostumaseroreflexodessamudançanorestantedosoft- ware. Apesardenãoserofocodolivro,veremosumpoucosobretestesnocapítulo 10,eentãoentenderemosoquantoessaéumaferramentaimportanteparaminimi- zarosriscosdessescomportamentosnãoprevistosapósumaalterações. Masantes mesmodeescrevertestesparaosistema,temosqueprojetaressesistemadeformaa nãopropagarmosasmudançasdeumadeterminadaparteparaosistematodo.Esse efeitocascataéquecostumaserapiorpartedeumamudançagrande. 1.1 Boas práticas de orientação a objetos Abaixacoesãoeoaltoacoplamentosãoasprincipaiscausasdeumamudança,que deveriaficarretidaemumaparte, sairdestruindoosistematodo. Masoquereal- menteéisso?Ouvimostantofalaremcoesãoeacoplamentomasasvezesnãotemos certezadoqueissosignifica. Coesão Acoesãoéacapacidadedeumobjetoestarfocadonasuatarefaespecífica.Seseu papelécalcularosaláriodofuncionário,entãoquefaçaisso. Elenãodevecalcular osalárioecalcularodescontodoimpostoderenda,ecalcularodescontodoplano 2

Description:
Uma das especificações mais atuais do Java, a especificação CDI (Context and Dependency Injection) traz um enorme poder no código que o desenvolvedor escreve, possibilitando para a aplicação recursos de injeção de dependência e ciclo de vida com escopos e contextos, de forma padronizada pa
See more

The list of books you might like

Most books are stored in the elastic cloud where traffic is expensive. For this reason, we have a limit on daily download.