spring ve springaop odayibas wwwjavadilicom

Upload: wwwjavadilicom

Post on 30-May-2018

221 views

Category:

Documents


1 download

TRANSCRIPT

  • 8/14/2019 Spring Ve Springaop ODAYIBAS WwwJavaDiliCom

    1/26

    java/j2ee Uygulama ats &

    Spring AOP

    Orun DAYIBA([email protected])

    2004, Ankara

  • 8/14/2019 Spring Ve Springaop ODAYIBAS WwwJavaDiliCom

    2/26

    1

    indekiler

    1.Giri ................................................................................................................................... 21.1. Spring J2EE Uygulama ats Nedir?...................................................................21.2. Spring Nasl alr?................................................................................................ 6

    1.2.1. Denetim evirimi (Inversion of Control) .................................................... 71.2.2. Gelitirim Yaklam ........................................................................................91.2.3. BeanFactory ve ekirdek Snf...................................................................... 91.2.4. ekirdein Yaam Dngs ......................................................................... 10

    1.2.5. Merhaba Spring! ............................................................................................ 111.3. Kullanm Seneryolar ............................................................................................ 122.Spring AOP ile Uygulama Gelitirimi ......................................................................... 13

    2.1. Uygulama rnei................................................................................................... 132.1.1. Yntem zleme lgisinin Uygulanmas ....................................................... 162.1.2. lgilerin Yeniden Kullanm.......................................................................... 19

    3.Sonu ............................................................................................................................... 234.Terimler Szl............................................................................................................ 245.Kaynaklar........................................................................................................................ 25

  • 8/14/2019 Spring Ve Springaop ODAYIBAS WwwJavaDiliCom

    3/26

    2

    1.Giri1.1. Spring J2EE Uygulama ats Nedir?

    Spring,J2EE (Java 2 Enterprise Edition) uygulamalarn gelitirme srelerinikolaylatrmay amalayan bir uygulama gelitirme atsdr(application framework).Spring olduka kullanl bir ok zellii bnyesinde barndrr. Bu zellikler, atyoluturan yedi farkl birim tarafndan ierilir.

    ekil 1.1. Spring uygulama atsnn alt yap bileenleri

    Bamllk iletimini (bkz.Blm 1.2.1) salayan kabukbirimi, uygulama atsnn entemel birimidir. Bu birim, gelitiriciye ekirdek kozasnn ilevlerini ynetme olanaverir. Kabuun ierdii temel kavram olan BeanFactory, ekirdek yaratmndatekilliin salanmas gerekliliini ortadan kaldrp, bamllklarn biim ve tanmlarnelemeyi programlama mantndan dlar.

    Kabuk biriminin stnde, ekirdeklere uygulama ats tarznda eriimi salayan,balam birimi bulunur. Balam birimi, zelliklerini ekirdek biriminden kaltr. Buzelliklere metin tabanl ileti gnderme destei gibi zellikleri de ekler.

    DAO birimi, aba gerektiren JDBC kodlama ve veri taban reticisine baml hatakodlarn ortadan kaldran JDBC soyutlama katmann salar. JDBC paketi, sadece zelara yzleri gerekletiren snflara deil, tmPOJOlara (Plain Old Java Objects / Basit

    Java Nesneleri) da birim ilem ynetimi gerekletirmek zere programlama vetanmlama yntemleri sunar.

    ORM birimi, JDO, iBatis ve Hibernate de dahil olmak zere, popler nesne-ilikiselelemeAPIlerine (Application Programming Interface / Uygulama Programlama

  • 8/14/2019 Spring Ve Springaop ODAYIBAS WwwJavaDiliCom

    4/26

    3

    Arayz) btnletirme katman sunar. Gelitirici, ORM birimini kullanarak, tm bunesne-ilikisel eleyicileri Springin dier tm imkanlaryla birlikte kullanabilir.

    Springin AOP birimi, ynelim tabanl programlama gerekletirimi olan AOP

    politikas

    sunar. Bu politika sayesinde, gelitirici kodunda ba

    ml

    l

    k yaratacakelemelerden uzak, ilevsel tanmlamalar yapabilir. Kod dzeyi ara-veri (meta-data)ileviyle, tm davransal veriler koda dahil edilebilir. (.NET platformundaki niteliklergibi)

    Springin Web birimi,servletdinleyicileri ve web tabanl uygulama balamnkullanarak balamlara ilk deer atama gibi temel web tabanl btnleim zelliklerinisalar. Ayrca bu birim, Springin WebWorkya da Struts ile birlikte kullanlddurumlarda btnleimi de gerekletirir.

    ekil 1.2. Spring ara katmannn nc parti bir web ats ile kullanm

    Springin Web MVC (Model-View-Control / Model-Grnm-Denetim) birimi, webuygulamalar iin Model-Grnm-Denetim gerekletirimini salar. Springin MVCgerekletirimi, yalnzca basit bir gerekletirim deil, Spring atsnn tm zelliklerine(rnein; geerlilik denetimi) taban olan, model ile etki alan arasnda kesin ayrm salar.

    Spring, bir koza (container), bileenleri biimlendirmek ve bir araya getirmek iin birat ve birim ilem iletimi, kalc saklama ilemi gibi bir dizi servisten oluur. Springatsn kullanarak bir uygulama oluturulurken, aadaki admlar gerekleir:

  • 8/14/2019 Spring Ve Springaop ODAYIBAS WwwJavaDiliCom

    5/26

    4

    Kozaya yerletirilecek, alt dzey Java ekirdekleri kodlanr. Birbirine bamlekirdeklerle ilgili kontroller kodlanmadan Spring atsnn kontrolne braklr.

    ekirdekler dzenlenir. Bu aamada, ounlukla Springin XML dzenlemeservisi kullanlarak, ekirdeklerin isimleri, snflar, veri alanlar ve varsa ilk deeratamalar tanmlanr.

    Spring, XML ktklerini okuyup elde ettii ilk deer atamalar ve tanmlarkullanr ve Java ekirdekleri yaratlr.

    Springin ana birimi, bamsz ekirdekleri ve tanmlar bir araya getirerekuygulamay alr hale getiren XML ekirdek fabrikasdr. Alternatif olarak, Springotomatik balantzelliini kullanarak tanm bilgisine ihtiya duymakszn bir ook

    balant yapabilir. rnein, eer uygulama tek bir veri kaynana ihtiya duyuyor vegelitirici sadece bu veri kaynan tanmlam ise Spring bu veri kaynana otomatik

    balant yoluyla eriebilir.

    Yukarda anlatlan tanm ve yaratm servis alt yapsnn stnde baz servisler yer alr.Bunlarn bir ou basit, st dzey soyutlama salayan servislerdir. lgili servisler, J2EEmimarisinde yer alan servislerin yada dier alt dzey uygulama atlarndan yararlanrlar.Aada, Spring destekledii atlar zetlenmitir:

    JDBC kalc saklama ats: Bu at, basit JDBC uygulamalarnn gelitirilmesinikolaylatrr. SQLState ile, SQLEnin sunduundan daha anlaml bir hiyerariyesahip aykr durum kmesi sunar. En nemlisi, JDBCnin detaylarna boulmadan

    btnleik ve tutarl kodlama olanaklar sunar.

    OR eleme ats: Bu at,Hibernate veJDO gibi OR aralarn Springinierisinde kullanmay olanakl klar.

    Birim ilem ats: Springdeki bildiri temelli birim ilemler sayesinde, oldukafazla kodlama yerine, sadece birim ilem politikas tanmlanarak gerekletirimkolaylatrlr.

    MVC Web ats: Strustda olduu gibi, Spring de model, grnm ve denetimibu aty kullanarak, birbirinden kesin olarak ayrr.

    Springi kullanmak iin yukardaki atlarn ayrntlarn bilmeye gerek yoktur.EJBden farkl olarak, gelitirici yukardaki atlar kademeli ve ihtiyalar dorultusunda,uygulamasna ekleyebilir.

    Springin gerekletirimi srasnda, gelitiriciler, var olan denenmi (gvenilir) atlarkullanarak Springin iine yerletirmilerdir. Bu yaklam sayesinde servisler arassoyutlama salanm ve greli kk bir servis kmesini kullanarak uygulama gelitirmekdaha kolay bir hale gelmitir.

    Spring, giderek daha fazla rabet gren hafif koza (lightweight container) yaklamn

    benimsemitir. Bu yaklamn ar kozadan (heavyweight container) farklar aadakigibi zetlenebilir:

  • 8/14/2019 Spring Ve Springaop ODAYIBAS WwwJavaDiliCom

    6/26

    5

    Ar koza, n tanml tr bileenlerini kabul eder. rnein; EJB bileenleri,dorudan bir ka taban snftan kaltlr. Microsoftun OLEortam, standart birarayzn gerekletirimini zorunlu klar. Tomcatsunucular sadeceservletleri

    kabul eder. Dier taraftan hafif kozalar Java nesnelerini tanmlamak iin, yansma(reflection) yada yaratm yntemlerini (constructor) kabul ederler.

    Ar kozalar, zerlerine yerletirilecek bileenlere daha fazla bamllk koarlar.EJB kozalar, EJB yaam dngsn gerekletirmek zere esnek olmayan birAPIkullanmak zorundadrlar. EJB bileenleri kaltm, ilem dizileri gibigerekletirimler iin sk tanmlara sahiptirler. Baz durumlarda bu tanmlarntekrarlanmasn gerektiren durumlar olabilir. Spring, bileenlere her hangi bir

    bamllk komaz. Bylece, Spring bileenleri koza dnda da kolaylklaaltrlp snanabilir ok daha az bir aba bile farkl mimarilere uygun halegetirilebilir.

    lk bakta bile yaklamlar arasndaki olduka byktr. Her iki yaklam dakullanan bir gelitirici, aradaki farkn sadece can skc detaylardan kurtulmaktan ok dahafazlas olduunu grecektir.

  • 8/14/2019 Spring Ve Springaop ODAYIBAS WwwJavaDiliCom

    7/26

    6

    1.2. Spring Nasl alr?Spring uygulama atsnn temel alma mant, ekirdeklerin bamllk iletimitasarm rntsne gre ele alnmasdr. (bkz.Blm 1.2.1) ekirdekler, kendilerine

    baml snflardaki verilere sahiplerdir. ekirdekler, kendi niteliklerini ve bamllbulunan dier ekirdekleri, ekirdek tanmlayc ktklerdeki verileri kullanaraktanmlarlar.

    ekirdek, sz edilen snflarn olgularnn yaratmak ya da JNDI istemlerinikullanarak snflarn yerini saptamak zorunda deildir. Spring uygulama ats,tanmlaycy kullanarak ilgili snflarn yerini belirleme iini stlenir ve bu snflaristemci snf iin eriilebilir klar.

    ekil 1.3. Uygulama katmanlar ve ele aldklar yaplandrma ktkleri

    Spring bamllk iletimi (bkz.Blm 1.2.1) tasarm rntsndeAssembler(Btnletirici) roln stlenir. Denetimin, btnletiriciye gemesi ile baml snflarzerinde deiikler yaplandrma ktndeki basit bir deiklikle yaplabilir hale gelir.Bu rnt zelliinin Springe yansmas olarak; Spring, balam indirgeyerek, sistemi

    birim snamalar iin de uygun hale getirmi olur. Bu durum Springin neden bamllkiletimi tasarm rntsn kullandn aklar.1

    Springin salad dier zelliklerden bir ka aadaki gibi zetlenebilir:

    Spring, BeanFactory (bkz.Blm 1.2.3.) yardm ile kendiliinden, hangiekirdeklerin baml olduuna karar verebilir.

    Spring, ekirdek zerindeki bamllklar denetleyebilir. Kurulmas zorunlu olandeerleri, ilklendirme srasnda denetleyebilir. Denetimin yaplmamas

    1 Martin Fowlern Bamllkletimi rnts ile yerine uygulanabilecek, Servis Yerletiricisi tasarm

    rntsn bir rnek ile karlatrd yazsna ulamak iin;URL: http://www.martinfowler.com/articles/injection.html#ServiceLocatorVsDependencyInjection

    http://servicelocatorvsdependencyinjection/http://servicelocatorvsdependencyinjection/
  • 8/14/2019 Spring Ve Springaop ODAYIBAS WwwJavaDiliCom

    8/26

    7

    durumunda, BeanFactory, varsaylan deeri kurar. Bu zellik zorunlu deilseimseldir. (istenildiine devreden karlabilir)

    Spring, birden fazla kaynak ktn ayn anda ynetebilir.1.2.1. Denetim evirimi (Inversion of Control)2004 yl balarnda Martin Fowler, kiisel sitesinde denetim evrimi hakknda

    okuyucularna unu sordu: denetimin hangi yn evrilir ?. Denetim evrimihakkndaki karlkl tartmalardan sonra M. Fowler, rntnn isminin deitirilmesininerdi. eriini daha ok belli eden yeni isim;Bamllkletimi (Dependency Injection)olarak M.Fowler tarafndan kullanlmaya baland.2

    ada gelitiriciler, denetim sahipliini deitirerek uygulamalarna etkili yararlarsalarlar. ou uygulamada, nesneler yada bileenlerle servisler arasnda kalc balarkurulur. Gelitirici bu yaklam uygular ise, bu yaklamn tm olumsuz ynlerini dekoduna dahil etmi olur. Baz durumlarda servislerin dorudan arlmas gerekebilir.

    Gelitirici, servisi aran ve servis arasndaki bamll kaldrmak isteyebilir.PasifAlan Modellerinde (Passive Domain Models) olduu gibi denetim sahipliinindeitirilebildii bir mimari ile uygulama daha gl ve esnek bir yap kazanabilir. Bukazancn basite denetimi uygulamadan atya geirerek elde edebildiimizisyleyebiliriz.

    Tanmladmz bu yaklama denetim evirimi (inversion of control) denir.

    Denetim evrimi (ya da dier ad ile Bamllkletimi), nesnenin gerekletirimini vebaml olduu nesnelerin yaratmndan ayrr. Gerekletirim ile yaratm aras ilikilerinsorumluluu Btnletirici (Assembler) kod kesiminebraklr. Gerekletirimine ihtiyaduyulan nesneye, baml olduu nesnelerin yaratmn ihtiya duymadan eriilebilir.Btnletirici ihtiya duyarsa bu nesneleri yaratabilir. Btnletirici bu dzenlemeyiyaparken yanlzca yaplandrma ktn (Configuration File) kullanr. Bylece, Springok etkin ve kolay snama imakanlar salar.

    Bamllkletiminin (Denetim evrimi / D..) tr vardr:

    1. Tr D.. : Arayz iletimi (Interface Injection) olarak da bilinir. Arayzkullanarak iletim gerekletirilir. Arayz, iletim yntemlerini tanmlar vegerekletirim snf bu arayz kullanr.

    2. Tr D.. : Kurucu iletimi (Setter Injection) olarak da bilinir. letim kurucuyntem aracl ile gerekletirilir. Kurucu yntem, gerekli olduunda bamlsnflar edinmek iin kullanlr.

    2

    Martin Fowlern Denetim evrimi/Bamllkletimi hakkndaki yazs konu hakknda detayl bilgi ierir.Yazya yazya ulamak iin;URL: http://martinfowler.com/articles/injection.html

    http://martinfowler.com/articles/injection.htmlhttp://martinfowler.com/articles/injection.html
  • 8/14/2019 Spring Ve Springaop ODAYIBAS WwwJavaDiliCom

    9/26

    8

    3. Tr D.. : Yapc iletimi (Constructor Injection) olarak da bilinir. lgili snf,tm bamllklarnn edinilmesi iin bir yapc tanmlar. Baml snflar yapcyntemin ileneni olarak geirilirler.

    Spring uygulama ats, yukardaki trlerden Kurucu ve Yapc iletimlerini destekler(2. ve 3. tr D..ler). nerilen, Kurucu iletimi kullanmaktr.

    ekil 1.4. Hafif Denetim evirimi Kozalar

    Hafif kozalarda, denetim evirimi, uygulamann belirli bir ynne odaklanr;bileenlerin bamllk iletimi(dependency injection) dorultusunda dzenlenmesi veuygulamann bir btn haline getirilmesi. Bileenler ile servisler aras kalc balantlarnyerini dzenleme tanmlar alr ve uygulamann bir btn haline getirilmesi uygulamagelitirme atsnn denetimine braklr.

    Nesnelerin yaratm ve niteliklerinin ilgili deerlere kurulmas gibi ilemler,geleneksel uygulamalardan, hafif kozalarn oluturduu atlara aktarlmtr. Bu aktarmsrecinde, koza iki farkl bamll karlar: veri kaynann biimine bamll ve

    DAO(Data Access Object)nun veri kaynana bamll. Bu yaklamla, balam(Coupling) koddan biim tanmlarna kayar ve Tekil kalp (Singleton) yaplar kaybolur.Gelitirici, basite snf ve biim tanmlarn yapar, uygulama ats nesnelerin olgularnyaratp, uygulamay oluturur.

  • 8/14/2019 Spring Ve Springaop ODAYIBAS WwwJavaDiliCom

    10/26

    9

    1.2.2.Gelitirim YaklamSpring uygulama at

    s

    n

    n temel paketi, org.springframework.beanspaketidir.Spring uygulama ats,JavaBeansi kullanr ve bu paket Java ekirdekleri zerindeyaplacak olan ilemlerin, temel imkanlarn ounu salar. Ayn zamanda,JavaBeans,Springin ierdii dier baz snflara da alt yap salar. Springin hereyi demek olanBamllkletimi tasarm rnts de temelini bu pakete dayandrr.

    Kullanc, Spring uygulama atsnn olanaklarndan iki farkl yolu kullanarakyararlanabilir:

    BeanFactory ApplicationContext

    BeanFactory, Spring ekirdeklerinin verilerini tutan ve kullancnn bu verileriynetmesini salayan reysel bir retim birimidir(generic factory). BeanFactory ilekullanc, Spring uygulama atsnn temel olanaklarn kolaylkla kullanabilir.

    ApplicationContext, BeanFactorynin stne konumlanarak, Spring uygulamaatsnn salad tm temel olanaklar kaltr. Bu temel olanaklara ek olarak,ApplicationContext, Olay Ynetimi (Event Managment), Uluslararaslatrma(Internationalization) ve Kaynak Ynetimi (Resource Managment) gibi olanaklar dakullancya sunar.

    BeanFactory, zellikle dk bellek kullanm gerektiren durumlarda (rnein; tmAPIyi ieren bir applet kaynak sknts yaratabilir.) yararldr. Springin temelzelliklerini kullanlabilir klar ve ApplicationContextin ierdii fazladan zellikleriuygulamaya dahil etmez.

    ApplicaitonContext, Springi uygulama ats tabanl bir uygulama gelitirimi iinkullanrken, BeanFactory, programsal bir yaklam sunar.

    1.2.3.BeanFactory ve ekirdek SnfBeanFactory, bir grup ekirdek ieren bir retim birimi snf gibidir. BeanFactory,

    ilgili ekirdeklerin BeanDefinition (ekirdek tanm belirtimi) verilerini tutarak,kullancdan istek gelmesi durumunda ,bu ekirdeklerden her hangi birinin bir olgusunuoluturabilir.

    XMLBeanFactory, Spring uygulama ats tarafndan salanan bir BeanFactorygerekletirimidir. XMLBeanFactory, BeanDefinition verilerini dorudan XMLktnden okuyabilir. Bu ilem srasnda XMLBeanFactory, beans.dtd adl DTD

    ktn kullanr. Bylece ktkten eriilen verinin geerlilik denetimini gerekletirmiolur.

  • 8/14/2019 Spring Ve Springaop ODAYIBAS WwwJavaDiliCom

    11/26

    10

    BeanFactory iinde tanml ekirdek, uygulamadaki i mantn ieren ekirdektir.Spring uygulama ats, ekirdek yaplar iin her hangi bir yapy kullancya zorlamaz(Bu konuda bir standart komaz).J2EEuyumlu her ekirdek yaps, Spring tarafndan da

    kabul edilir. Strustya da dier baka uygulama at

    lar

    ndakinden farkl

    olarak,ekirdeklere her hangi bir Spring arayz uygulanmadan, ekirdekler at ierisindekullanlabilir durumdadr.

    Kullanlacak olan denetim evrimi trne bal olarak, ekirdek ilgili tasarm rntskurallarn gzetebilir. rnein; yapc iletimi kullanacak bir ekirdek, yapc yntemleritanmlamaldr. Spring uygulama ats, yalnzca kurucu ve yapc iletimlerini destekler.Fakat, nerilen, birden fazla yapc yntem ekirdei hantallatrp ynetimizorlatracandan, kurucu iletimi kullanmaktr.

    Bir ekirdee ilikin bir ya da daha fazla kimlik olabilir. BeanFactory kimlik verisini

    kullarak ilgili ekirdee ulaandan, kimlik verisi, BeanFactory ierisinde biricikolmaldr. ekirdein birdan fazla kimlie sahip olmas durumunda, bu kimlikler arma(alias) olarak tanmlanr.

    Spring uygulama ats, ekirdeklerin nasl yaratlacayla ilgilenip, istemciye ilgiliveriyi geri dner. ekirdekler tekil kalp olarak tanmlanabilir. Bu durumda, ilgiliekirdek koza ierisinde belirli bir anda yalnzca bir olgu ile var olabilir. BeanFactoryyegelen istemlere bu tek ekirdek kullanlarak cevap verilir. Tekil kalp olaraktanmlanmam ya da n rn (Prototype) olarak tanmlanm ekirdekler, birden fazlaolguya sahip olabilirler. Bu durumda, BeanFactorye gelen her istemde yeni bir olguyaratlr ve bu olgu kullanlarak istemciye cevap verilir.

    BeanFactory, her yeni istemde (her istemci iin) yeni bir olgu yaratldndan, n rnolarak tanml ekirdekler iin yaam dngs ynetimi (Lifecycle Managment) yapamaz.Bir sonraki blm, ekirdeklerin yaam dngsn ele alr.

    1.2.4.ekirdein Yaam Dngsekirdek yarat

    ld

    ktan ve ilk deer atama ilemleri gerekletirildikten sonra,BeanFactory, geri arm yntemlerini (callback methods) kullanarak, BeanFactoryiindeki ekirdein davranlarna mdahale edebilir. Bu yntemlerden biri ilk-yntemdir(init-method). InitializingBean arayz, BeanFactory iinde ekirdek zelliklerikurulduktan sonra ilklendirme (Initialization) yetenei salar. InitializingBeanierisindeki afterPropertiesSet() yntemi, kullancya tm ekirdek zelliklerinindoru kurulup kurulmadn denetleme olana salar. Kullanc bu yntem aracl ile,zelliklerin kurulmasnn hemen ardndan ele alnmas gereken ilemleri de yerinegetirebilir. Bu yntemi kullanacak bir ekirdek, InitializingBean arayzn gerekletirirve gerek duyduu ilemleri afterPropertiesSet() yntemi ierisinde ierir.

    Eer ilklendirme ilem yk dk dzeyde ise, kullanc ekirdek ierisindetanmlad bir yntem ile bu ilemleri ele alabilir. Bur durumda, gerekletirilen yntem

  • 8/14/2019 Spring Ve Springaop ODAYIBAS WwwJavaDiliCom

    12/26

    11

    ekirdein ilk-yntem niteliinin karl olarak tanmlanr(init-method attribute). Buyaklamn benimsenmesi halinde, ekirdein, InitializingBean arayzn gerekletirmezorunluluu kalkar.

    Yukar

    da ekirdein ilklendirme ilemlerinden bahsettik. Ayn

    yakla

    m ile,ekirdein kullanm iin tanml DisposableBean arayz de ekirdek yok edildiktensonra ele alnmas gereken ilemleri salar. lkelendirmede olduu gibi, sonlandrmada dagerekletirilen yntem, ekirdein son-yntem niteliinin karl olarak tanmlanr(destroy-method attribute).

    1.2.5. Merhaba Spring!Aada basit bir ekirdei tanmlayan XML kod paras verilmitir.

    Merhaba Spring! Uygulamasi

    Merhaba Spring! Uygulamasinin bana ihtiyaci var.

    Kod 1.1.lk yaplandrma kt

    Yukardaki rnek, MerhabaSpringsnfnn tanmn gsterir. Bu snf,IlkSinifsnfna bamldr. benimStringzellii varsaylan deeri ile birlikte tanmlanmtr.BeanFactory, tanmlanan ekirdein birinciBamlSinifa ihtiya duyduunu

    bildiinden, bu snfn bir olgusunu ana snfn bavuru (reference) verisini kurmadannce yaratr.

    ozellikleriKutuktenAl()yntemi ilk-yntem olarak tanmlandndan,IlkSinifn zellikleri kurulduktan hemen sonra arlr.

  • 8/14/2019 Spring Ve Springaop ODAYIBAS WwwJavaDiliCom

    13/26

    12

    1.3. Kullanm SeneryolarBlm 1.1.de aklanan uygulama atsn oluturan birimler sayesinde, Spring basitbirappletden karmak datk bir uygulamaya kadar her alanda kullanlabilir.

    ekil 1.3. rnek Spring Web Uygulamas

    Yukardaki gsterilen mantksal izim tipik bir Spring web uygulamasn gsterir. Buuygulama Springin salad olanaklarn byk bir ksmn iinde barndrr.TransactionProxyFactoryBeans kullanlarak, web uygulamas EJBninsalad koza denetimli birim ilemler gibi tamamen birim ilemsel bir yap kazanabilir.

    Tm i mant(business logic), Springin bamllk iletimi (dependency injection)kozas tarafndan ynetilen basit java nesneleri (POJOlar) kullanlarakgerekletirilebilir. Web katmanndan bamsz E-posta gnderimi, veri geerlilikdenetimi gibi ilave servisler, gelitiriciye geerlilik kurallarn istedii noktadauygulamaya dahil etme olana salar. Springin ORM destei, Hibernate,JDO ve iBatisile btnleiktir. rnein; HibernateDaoSupport kullanarak, gelitirici var olanHibernate elemelerini tekrar kullanabilir.Form Denetimleri, alan modeli aracl ile webkatmanyla btnleir. Bylelikle, ActionForms ya da HTTP deitirgeleriniuygulamann alan modelindeki deerler ile deitiren bir baka snfa gerek kalmaz. Busnflar koda dahil edilmez.

  • 8/14/2019 Spring Ve Springaop ODAYIBAS WwwJavaDiliCom

    14/26

    13

    2.Spring AOP ile Uygulama GelitirimiSpring, AOP3 erevesinde neler sunar?

    "Ama tam anlamyla bir AOP gerekletirimini salamak yerine, (her ne kadar SpringAOP bunu fazlasyla karlasa da) J2EE uygulamalarnda karlalan genel problemlerinzmne yardmc olmak iin, AOP gerekletirimi ile Spring'in denetim evrimi yaklamarasnda bir tmletirme salamaktr"

    Spring Bavuru Belgesi

    Yukarda Spring gelitirme ekibi tarafndan tanmlanan hedefe ulamak iin, Springuygulama erevesi AOP kavramlarnn bir ksmna (seilmi bir alt kmesine) destek verir.Bu blmde aadaki AOP kavramlarnn Spring ierisinde nasl gerekletirildii elealnacaktr:

    Tavsiyeler (Advices): before/afterReturning ve afterThrowing tavsiyeler ekirdekolarak nasl tanmlanr?

    Kesim Noktalar (Pointcuts): XML Spring ekirdek Yaplandrma ktnnieriini bir araya getirmek zere bir eylemsiz kesim noktas mant nasltanmlanr?

    Danmanlar (Advisors): Pointcut tanmlamalar ile Advice ekirdekleriniilikilendirme nasl gerekletirilir?

    2.1. Uygulama rneiGenellikle, Spring kat kurallar koyan bir yapya sahip deildir. Farkl altrmalar

    yapmay kolaylatrrken, kullancya bir yaklam zorlamaktan kanr."

    Spring Bavuru Belgesi

    Spring atsnn AOP yeteneklerini snamak iin, ncelikle basit bir java uygulamasoluturmalyz. Spring uygulama ats ierisinde, IBusinessLogic arayz ve BusinessLogicsnf, ekirdek iin basit oluturum paralar salarlar. Her ne kadar bizim basituygulamamzn mant ierisinde ilgili arayz gerekli olmasa da, bu gerekletirim yaklamda iyi bir alltrma olacaktr.

    3 AOP hakknda daha ayrntl bilgi iin: http://www.aosd.net

    http://www.aosd.net/http://www.aosd.net/
  • 8/14/2019 Spring Ve Springaop ODAYIBAS WwwJavaDiliCom

    15/26

    14

    AisMantigi

    Kod 2.1. springyapilandirma.xml

    Springin alma zaman yaplandrmas, ekirdee hangi ilemlerin ve birimlerinuygulanacana karar verebilir. Bu yaplandrma bilgisi, springyapilandirma.xmlyaplandrma kt tarafndan salanr.

    Yaplandrma bilgisi, yklenecek ekirdein AIsMantigi arayzngerekletirmesi gerektiini belirtir. Ardndan, ekirdek gerekletirim snf olarakIsMantigi ile ilikilendirilir. Bu kadar basit bir yntem arm iin bu kadar fazlatanmlama yapmak olduka fazla gibi gzkse de, aslnda gerekletirilen btnn bu ufak

    paras Spring bileenlerinin uygulamamza uygulanmasn salar.

    public interface AIsMantigi

    {

    public void yontem();

    }

    Kod 2.2. AIsMantigi.java

    public class IsMantigi implements AIsMantigi

    {

    public void yontem()

    {

    System.out.println("IsMantigi.yontem()'in icinde!");

    }

    }

    Kod 2.3. IsMantigi.java

  • 8/14/2019 Spring Ve Springaop ODAYIBAS WwwJavaDiliCom

    16/26

    15

    IsMantigi ekirdeinin "public" yntemlerini armak iin, bir AnaUygulamasnf tanmlayabiliriz.

    import org.springframework.context.ApplicationContext;

    import

    org.springframework.context.support.FileSystemXmlApplicationContext;

    public class AnaUygulama

    {

    public static void main(String [] args)

    {

    // Yapilandirma Kutugunu Oku

    ApplicationContext ctx = new

    FileSystemXmlApplicationContext

    ("springyapilandirma.xml");

    // Nesnenin Olgusunu Yarat

    AIsMantigi sinamaNesnesi = (AIsMantigi)

    ctx.getBean("isMantigiCekirdegi");

    // Cekirdegin "public" yontemini cagir (sinama)

    sinamaNesnesi.yontem();

    }

    }

    Kod 2.4. AnaUygulama.java

    AnaUygulama, ctx.getBean(isMantigiCekirdegi)ars ile ekirdein birolgusunun oluturulmas ve Spring uygulama atsna yklenmesinin ynetiminigerekletirir. Springin IsMantigi ekirdeini ilklendirmeyi denetlemesine izin vermek,Springin ekirdek uygulamaya sunulmadan alma zamannda tm J2EE dizgesiniynetmesini salar.

    Aadaki izge, AnaUygulama her hangi bir a uygulanmadan altrldndaoluacak ardl ilem izgesini (Sequence Diagram) gsterir:

    izge 2.1. AnaUygulama iin ardl ilem izgesi

  • 8/14/2019 Spring Ve Springaop ODAYIBAS WwwJavaDiliCom

    17/26

    16

    2.1.1.Yntem zleme lgisinin Uygulanmaslgiye Ynelik Programlama yakla

    m

    n

    n ierdii en temel zelliklerden biri, yntemizleme ilgisidir(Method Tracing Aspect). Bu eylemsiz ilgi, uygulama kolayl asndan dalgiye Ynelik Programlama gerekletirimine iyi bir balang noktasdr.

    Yntem izleme ilgisi, yntemleri aran ve yntmelerden dnen balamlar elealarak, hedef uygulama ierisindeki izlenen yntem hakknda bilgi edinmeye olanak tanr.lgiye ynelik yaklamdaki sonra ve nce tavsiye (Advice) trleri, yntem armndan nceya da sonra tetiklenebildiklerinden, bu tr katlm noktalarn(join point) elde etmek iinkullanlr.

    Spring uygulama atsn kullanarak, nce tr tavsiye gerekletirimi,

    IzlemeOnceTavsiye snfnda rneklenmitir.

    import java.lang.reflect.Method;

    import org.springframework.aop.MethodBeforeAdvice;

    public class IzlemeOnceTavsiye implements MethodBeforeAdvice

    {

    public void before(Method yontem,

    Object[] args,

    Object hedef)

    throws Throwable

    {System.out.println(

    "Merhaba Spring! (" +

    this.getClass().getName() +

    ")");

    }

    }

    Kod 2.5. IzlemeOnceTavsiye.java

    Benzer yaklamla, sonra tr tavsiye IzlemeSonraTavsiye snf ile

    rneklenmitir:

    import java.lang.reflect.Method;

    import org.springframework.aop.AfterReturningAdvice;

    public class IzlemeSonraTavsiye

    implements AfterReturningAdvice

    {

    public void afterReturning(Object nesne,

    Method yontem,

    Object[] args,

    Object hedef)

    throws Throwable

    {

  • 8/14/2019 Spring Ve Springaop ODAYIBAS WwwJavaDiliCom

    18/26

    17

    System.out.println(

    "Merhaba Spring! (" +

    this.getClass().getName() +

    ")");

    }

    }

    Kod 2.6. IzlemeSonraTavsiye.java

    Her iki snf da Spring uygulama atsnn ilgili arayzn gerekletirerek, tavsiyeninbelirli bir parasn oluturmutur. Her iki tr tavsiyede de before(..)ya daafterReturning(..) yntemleri, Springin alma zamannda uygun katlm noktasnaulaldnda, tavsiyeyi uyarmasn salamak iin tanmlanm yntemlerdir.

    Tanmlanan tavsiyelerin uygulamann uygun katlm noktalar ile ilikilendirilmesi

    iin, springyapilandirma.xml yaplandrma ktnde ilgili gnlemelerin yaplmasgerekir.

    AIsMantigi

    IzlemeOnceTavsiye

    IzlemeSonraTavsiye

  • 8/14/2019 Spring Ve Springaop ODAYIBAS WwwJavaDiliCom

    19/26

    18

    .*

    .*

    Kod 2.7. springyapilandirma.xml

    nceki yaplandrma ktne yeni tanmladmz iki tavsiye (IzlemeSonraTavsiye,IzlemeOnceTavsiye) eklendi. Her bir tavsiye, ilikilendirildii ekirdekteki katlmnoktalarn kesitirir. Tanmlanan bu tavsiyeler de kendi balarna birer ekirdek olarakyaplandrma ktnde tanmlanr. Bu ekirdeklerin tek ilevi, kesim noktalarn bir arayagetirmek ve ilikilendirildikleri ekirdee tavsiye etmektir. Bu rnek iin kesim noktalar,katlm noktalarn belirten dzgn deyimlerdir(regular expressions).

    org.springframework.aop.support.RegexpMethodPointcutAdvisor kesimnoktas tavsiye kayna bu rnek iin kullanldndan, kesim noktas mant dzgndeyimler kullanlarak tanmlanmtr. AIsMantigi arayzndeki farkl toplamalarda

    (Collections) kullanlabilecek dzgn deimler hakknda aadaki basit rnekler verilebilir:

    .* : Bu deyim ekirdekteki tm katlm noktalarn seer. ./AIsMantigi/.yontem : Bu deyim, sadece AIsMantigi

    icinde tanimli yontem () yntemini seer.

    Bu haliyle, yaplandrma kt izleme ilgisi iin uygun hale gelmitir.AnaUygulamann bir dahaki iletiliinde, IsMantigi snf ierisinde tanml tmyntemler izlenecektir. Bu durum aadaki ardl ilem izgesinde gsterilmitir:

  • 8/14/2019 Spring Ve Springaop ODAYIBAS WwwJavaDiliCom

    20/26

    19

    izge 2.2. AnaUygulama iin ardl ilem izgesi (asal yaklam ile)

    2.1.2.lgilerin Yeniden KullanmYntem izleme ilgisi, biraz daha karmak bir yap kazandrlarak, gnlk(Logging)

    ilgisi olarak geniletilebilir. Gnlk ilgisi iin gerekli ou zellik nceki ilgi olan yntemizlemede gerekletirildiinden, bu ilgi yeniden kullanm iin iyi bir rnek salar.

    Bu rnek iin; gnlk ilgisi, yntem izleme ilgisini uygulama iletilirken oluan aykrdurumlar gibi ek bilgileri grntleme amac ile geniletir. Gnlk ilgisinin etkin olarakkullanlmas iin, uygulamada baz deiiklikler yaplmaldr.

    public class IsMantigiAykiriDurumu extends Exception

    {

    // Aykiri Durum Tanimi

    }

    Kod 2.8. IsMantigiAykiriDurumu.java

    public interface AIsMantigi

    {

    public void yontem();

    public void aykiriYontem() throws IsMantigiAykiriDurumu;

    }

    Kod 2.9. AIsMantigi.java

  • 8/14/2019 Spring Ve Springaop ODAYIBAS WwwJavaDiliCom

    21/26

    20

    public class IsMantigi implements AISMantigi

    {

    public void yontem()

    {

    System.out.println("IsMantigi.yontem()'in icinde!");

    }

    public void aykiriYontem() throws IsMantigiAykiriDurumu

    {

    System.out.println("IsMantigi.aykiriYontem()'in icinde!");

    throw new IsMantigiAykiriDurumu();

    }

    }

    Kod 2.10. IsMantigi.java

    Artk, AnaUygulama ierisinde, void aykiriYontem() yntemine bir ar var.Buna ek olarak, olas aykr durum oluumlarna kar bir hata yakalama kod paras daeklenmitir.

    import org.springframework.context.ApplicationContext;

    import

    org.springframework.context.support.FileSystemXmlApplicationContext;

    public class AnaUygulama

    {

    public static void main(String [] args)

    {

    // Yapilandirma Kutugunu Oku

    ApplicationContext ctx

    = new FileSystemXmlApplicationContext("springyapilandirma.xml");

    // Nesnenin olgusunu yarat

    AIsMantigi sinamaNesnesi = (AIsMantigi)

    ctx.getBean("ismantigicekirdegi");

    // Cekirdegin "public" yontemlerini islet

    sinamaNesnesi.yontem();

    try

    {

    sinamaNesnesi.aykiriYontem();

    }

    catch(IsMantigiAykiriDurumu imad)

    {

    System.out.println("IsMantigiAykiriDurumu yakalandi!");

    }

    }

    }

    Kod 2.11. AnaUygulama.java

  • 8/14/2019 Spring Ve Springaop ODAYIBAS WwwJavaDiliCom

    22/26

    21

    Yntem izleme ilgisinin IzlemeOnceTavsiye ve IzlemeSonraTavsiyetavsiyeleri tamamen yeniden kullanlabilir durumdadr. GunlukAykiriTavsiye snf, yeniaykr durum gnlkleme ilemi iin bir tavsiye salar.

    import org.springframework.aop.ThrowsAdvice;

    import java.lang.reflect.Method;

    public class GunlukAykiriTavsiye implements ThrowsAdvice

    {

    public void afterThrowing(Method yontem, Object[] args, Object

    hedef, Throwable altsinif)

    {

    System.out.println("Gunluk girdisi: " + altsinif + "aykiri durumu

    olustu.");

    }}

    Kod 2.12. GunlukAykiriTavsiye.java

    Gnlk ilgisinin uygulamaya eklenmesi iin son adm olarak yaplandrma ktne,(springyapilandirma.xml) bu ilgi (GunlukAykiriTavsiye) ile ilgili tanmlarn eklenmesigerekir.

    .*

    Kod 2.13.Gnlk ilgisi iin, springyapilandirma.xml ktne eklenecek kod paralar

  • 8/14/2019 Spring Ve Springaop ODAYIBAS WwwJavaDiliCom

    23/26

    22

    izge 2.3 AnaUygulama iletilerek, gnlkleme ilgisinin Spring uygulama atstarafndan ele alndnda oluacak ak gsteren UML ardl ilem izgesini gsterir.

    izge 2.3. AnaUygulama iin ardl ilem izgesi (Gnlk tavsiyesi eklendikten sonra)

    Bu rnek ile ele alnan gnlk ilgisi, Spring uygulama atsn kullanarak, var olanilgilerin yeniden nasl kullanlacan, throwsbiimli tavsiyelerin nasl kullanlacangsterir. Daha karmak ve detayl bir gnlkleme yaps, (r:LOG4J4) nce ve sonra tryeni tavsiyeler tanmlayarak hali hazrda var olan yntem izleme ilgisinin gerekletiriminigeersiz klarak(override) elde edilebilir.

    4 LOG4J hakknda daha ayrntl bilgi iin, http://logging.apache.org/log4j/docs/

    http://logging.apache.org/log4j/docs/http://logging.apache.org/log4j/docs/
  • 8/14/2019 Spring Ve Springaop ODAYIBAS WwwJavaDiliCom

    24/26

    23

    3.SonuSpring uygulama ats, ok yeni bir at olmasna raman ksa srede yazlm

    gelitirme dnyasnda olduka ses getirmitir. Bu durumun balca nedeni; Springin var olanzmleri (r:Hibernate, JDO, AOP,... gibi) kopyalamayp, bu zmleri bir uyumierisinde bir araya getirmesinde yatar (Ancak, Spring gelitiricileri Strustun yeterincesalam olduundan phe ettiklerinden, yeni bir Internet ats tanmlamlardr).

    Spring, uygulama sunucusundan ve ortamdan bamsz bir yapya sahiptir. Bylece,uygulama sunucular aras tanabilirdir (Websphere, Weblogic, Jboss gibi yaygn uygulamasunucular ile uyumludur). Spring gelitirim ekibinin amalar dorultusunda, Springgelitiricinin yazmas gereken kod ykn azaltr. Spring uygulama atsnn bir dier arts,uygulama gelitirme ekibindeki tm gelitiricilerin Springi bilmesini gerektirmemesidir.Spring uygulama gerekletirimleri iin, Eclipse dzleminde destek bir eklenti yolu ilesalanabilmektedir5. lerliyen zamanlarda daha fazla sayda IDEnin Springi desteklemesi ilegerekletirim sreci daha da ksalacaktr. Springe balang noktas olarak, Springgelitirme ekibi tarafndan tanmlanan (bu belge hazrlanrken, hala gelitiriliyordu) Spring

    Bavuru Belgesi (bkz.Blm 5.) yeterli bir belgedir. Bu balamda, Springin tek eksi yan u an iin hakknda detayl fazla bir belge bulunmamasdr (Bu aku an ileti listesi6 ilekapatlyor).

    AOP (Aspect Oriented Programming / lgiye Ynelik Programlama) yeni ve oldukahzl kabul gren bir programlama yaklamdr. Spring bu yaklam Spring AOP aracl ile

    ierir. Spring AOP, AOP gerekletirimleri iin olduka yeterli olmakla birlikte gerekligrldndeAspectJ7de Spring uygulama ats ile kullanlabilir.

    Spring uygulama atsnnJ2EEdzlemindeki baarsndan sonra, Spring gelitiricileriuygulama atlarn.NETdzlemine uyarladlar.8 Bu durumun Springin geliimine olumlu

    bir etkisi olaca tartlmaz. Spring uygulama ats ierdii zellikler ve zgn yaklamlarile yazlm gelitirme dnyasnda daha uzun sre tercih edilecek gibi grnyor.

    Bu belgenin hazrlanmas srasnda grlerini aldm, Sn. Turgay ELK9, Sn. OuzASLANTRK10 ve Sn. Bedir TEKNERDOAN11a katklarndan dolay teekkr ederim.

    Orun DAYIBA

    5 Eclipse Spring UI hakknda detayl bilgi iin : http://www.springframework.org/spring-ide/eclipse/6 Spring uygulama ats ileti listesi : http://sourceforge.net/mailarchive/forum.php?forum_id=302877 AspectJ Java iin AOP destei salar, ayrntl bilgi : http://eclipse.org/aspectj/8 .NET dzlemi iin Spring uygulama ats: http://www.springframework.net9

    Hacettepe niversitesi / Ara. Gr.10 Hacettepe niversitesi / r. Gr.11 Twente niversitesi / Do. Dr.

    http://www.springframework.org/spring-ide/eclipse/http://sourceforge.net/mailarchive/forum.php?forum_id=30287http://eclipse.org/aspectj/http://www.springframework.net/http://www.springframework.net/http://eclipse.org/aspectj/http://sourceforge.net/mailarchive/forum.php?forum_id=30287http://www.springframework.org/spring-ide/eclipse/
  • 8/14/2019 Spring Ve Springaop ODAYIBAS WwwJavaDiliCom

    25/26

    24

    4.Terimler Szlngilizce Trke

    Alias Arma

    Aspect Oriented Programming lgiye Ynelik Programlama

    Assembler Btnletirici

    Bean ekirdek

    Business Logic Mant

    Collection Toplama

    Configuration File Yaplandrma Kt

    Container Koza

    Coupling BalamDependency Injection Bamllkletimi

    Design Patterns Tasarm rntleri

    Factory retim Birimi

    File Ktk

    Framework at

    Generic reysel

    Initialization lklendirme

    Interface Injection Arayz letimi

    Inversion of Control Denetim evrimi

    Join Point Katlm Noktas

    Lifecycle Yaam Dngs

    Map Elem

    Method Yntem

    Method Tracing Aspect Yntem zleme lgisi

    Pointcut Kesim Noktas

    Prototype n rn

    Reflection Yansma

    Regular Expression Dzgn Deyim

    Sequence Diagram Ardl lem izgesiSetter Injection Kurucu letimi

    Singleton Tekil Kalp

    Testing Snama

  • 8/14/2019 Spring Ve Springaop ODAYIBAS WwwJavaDiliCom

    26/26

    5.KaynaklarBasl Kaynaklar:

    Better, Faster Lighter Java(OReilly / ISBN: 0 596 00676 4 )

    Justin Gehtland, Bruce A. Tate

    nternet Kaynaklar:

    http://www.springframework.org/docs/reference/ http://tools.devchannel.org/devtoolschannel/04/04/15/1457223.shtml http://www.aosd.net http://www.onjava.com/pub/a/onjava/2004/07/14/springaop.html http://martinfowler.com/articles/injection.html http://blog.csdn.net/ylong/ http://www.onjava.com/pub/a/onjava/2004/01/14/aop.html

    rnek Uygulama Kaynak Kodlar:

    http://cs.hacettepe.edu.tr/~b20021809/Docs/Bil447/kaynak.zip

    http://www.springframework.org/docs/reference/http://tools.devchannel.org/devtoolschannel/04/04/15/1457223.shtmlhttp://www.aosd.net/http://www.onjava.com/pub/a/onjava/2004/07/14/springaop.htmlhttp://martinfowler.com/articles/injection.htmlhttp://blog.csdn.net/ylong/http://www.onjava.com/pub/a/onjava/2004/01/14/aop.htmlhttp://cs.hacettepe.edu.tr/~b20021809/Docs/Bil447/springAOP_kaynak.ziphttp://cs.hacettepe.edu.tr/~b20021809/Docs/Bil447/springAOP_kaynak.ziphttp://www.onjava.com/pub/a/onjava/2004/01/14/aop.htmlhttp://blog.csdn.net/ylong/http://martinfowler.com/articles/injection.htmlhttp://www.onjava.com/pub/a/onjava/2004/07/14/springaop.htmlhttp://www.aosd.net/http://tools.devchannel.org/devtoolschannel/04/04/15/1457223.shtmlhttp://www.springframework.org/docs/reference/