Hibernate IOC APEKER WwwJavaDiliCom

download Hibernate IOC APEKER WwwJavaDiliCom

of 25

Transcript of Hibernate IOC APEKER WwwJavaDiliCom

  • 8/14/2019 Hibernate IOC APEKER WwwJavaDiliCom

    1/25

    Hacettepe niversitesi

    Mhendislik Fakltesi

    Bilgisayar Mhendislii Blm

    ARATIRMA DEVHIBERNATE IOC

    Ali Gkalp Peker

    20221829

  • 8/14/2019 Hibernate IOC APEKER WwwJavaDiliCom

    2/25

    2

    erik

    1. IoC(Inversion of Control) 3

    1.1. IoC nedir? 31.2. IoCyi derinlemesine inceleme 4

    1.3. Kullanm Alanlar 9

    1.4. IoC Tiplerinin Artlar ve Eksileri 10

    2. Spring Framework 12

    2.1. Frameworke genel bak 13

    2.2. Spring Framework ve IoC container 17

    3.Spring IDE 20

    3.1.Spring IDE nedir ? 20

    3.2.Spring IDEnin zellikleri ? 20

    4.rnek 21

    5.Kaynaklar 25

  • 8/14/2019 Hibernate IOC APEKER WwwJavaDiliCom

    3/25

    3

    1.IoC(Inversion of Control)

    1.1. IoC nedir ?Deien yazlm gelitirme koullar altnda daha byk ve geni apl

    projelerin daha hzl , daha etkili ve daha kolay gelitirilebilmesi iin bir ok tasarmrnts gelitirilmitir.

    Bir ok farkl gelitirme ortamlarndan oluan projeleri birbirine entegre etmek

    gelien yazlm sektrnde ele alnmas gereken problemlerden birisiolmutur.Gnmzde projelerin byk apta olmas ve birok alan tarafndangelitirilmesi beraberinde birok problemi getirmitir.Projelerin ayr paralarnn ayrframeworklerde yaplmas veya deiik trdeki paralarn her biri iin farkl uygulamagelitirme politikalar kullanlmas , projelerin tek bir yap halinde birletirilmesinizorlatrmaktadr.Mesela bir web uygulamasnda sayfa tasarm iin ayr bir ortamkullanlmas , i mant iin ise ayr bir ortamn kullanlmas bu iki ortamn birbirineentegre olmasn gerektirmektedir.Ayrca iin iine veritaban gibi baka etmenlerinde girmesi web uygulamasnn tek , btn bir uygulama olarak ortaya karlmasnzorlatrmaktadr.

    Java tabanl yazlm gelitirimlerinde ise her zaman farkl projelerdeki

    bileenleri birletirmek iin lightweight containerlar kullanlmtr.Bu containerlarnbirden ok nesneyi balayabilmesi iin kullanlan genel tasarm rnts IoCdir.

    IoC ksaca , uygulamalar arasnda kurulan i aknn kurulmasnadayanr.Uygulamann deiik mimariden gelen birok parasnn , bu paralarkendisi etkilenmeden kolaylkla kurulabilmesini salar.Bunu salamann birok yolubulunmaktadr.Fakat asl amac iletiimin veya birletirme ileminin paralaretkilemeden yaplabilmesini salamaktr.Bu yzden bu yollar belirtilen kriter gznnde bulundurularak tespit edilmitir.

    IoC ilk bata , inversion of control yani kontroln evrilmesi adyla ortayakm olsa da , Martin Fowler bir eitimci bu terimin anlamn irdelemitir.kontrolhangi adan eviriyorlar? diye bir soru ynelten Fowler daha sonra teriminDependency Injection olarak deitirilmesini nermitir.Tasarm rntsn daha iyiaklayan bu terim daha sonra birok evre tarafndan kabul edilmitir.

    IoC u an birok frameworkde kullanlan ve frameworklerde yeni yenivurgulanan fakat aslnda karakteristik olarak birok frameworkn iinde ou kezkullanlm olan etkili bir tekniktir.

  • 8/14/2019 Hibernate IOC APEKER WwwJavaDiliCom

    4/25

    4

    1.2.IoCyi derinlemesine inceleme

    Bir rnek

    IoCyi daha derinlemesine incelemek iin bu konuda bir rnektenbahsedeceiz.Bu rnekte bir ynetmen tarafndan ekilen filmleri listeleyen birbileen yazacaz.Bu bileen tek bir fonksiyon ieriyor.

    class MovieLister...

    public Movie[ ] moviesDirectedBy(String arg) {List allMovies = finder.findAll();

    for (Iterator it = allMovies.iterator(); it.hasNext();) {Movie movie = (Movie) it.next();if (!movie.getDirector().equals(arg)) it.remove();

    }return (Movie[]) allMovies.toArray(new Movie[allMovies.size()]);

    }

    Bu snf basitce u ilemleri yapmakta ; tm filmleri al ve iinden biziilgilendiren filmleri se , daha sonra bu filmleri geri dndr.

    Bu kod ile anlatlmak istenen nokta , finder snfyla list snfnn nasl

    baland

    .Acaba kulland

    m

    z moviesDirectedBy methodunu filmlerin saklan

    biiminden nasl bamszlatrabilirim.Bylece metodum sadece findAll metodunabavurur ve sonucunu alr. moviesDirectedBy metodunu findAll metodu hakkndabaka hibirey ilgilendirmez.findAll metodu ise sadece nasl yant vereceinibilir.Bunu basit bir arayz ile salayabiliriz.

    public interface MovieFinder {List findAll();

    }

    u an tm problem halledilmi durumda.Fakat ayn zamanda bu arayzkullanan somut bir snf balangta atamam gerekmekte.Bu sayede bizim iin

    gerekli arayze sahip s

    n

    f

    atanacak ve bize sadece arama yapma kalacak.class MovieLister...

    private MovieFinder finder;public MovieLister() {finder = new ColonDelimitedMovieFinder("movies.txt");}

    Burada kullanlan ColonDelimitedMovieFindersnf gerekli arayc snf bizeretip dndrecektir (Factory rnts).

  • 8/14/2019 Hibernate IOC APEKER WwwJavaDiliCom

    5/25

    5

    u haliyle bu uygulama gayet iyi bir durumda ve geniletilebilir yapda.Yazan

    kiinin kullanm iin mkemmel.Fakat eer bu sistem baka bir program iindekullanlacaksa.Peki o zaman ne olur?Film depolama iin kullanlan dosya biimiayn olduu zaman da problem yok , nk sistem hali haz rda dosya biimi iin degayet dzgn alyor.Fakat ya dosya biimi deiecekse?Mesela dosya XMLbiiminde saklanacak veya dosya ile hi uralmayacak filmler veritabanndasaklanacak.Bu durumda baka bir snf daha yazmam gerekecek.

    Tanmladm arayz sayesinde moviesDirectedBy metodunun deimesinegerek kalmyor.Fakat yeni birMovieFindergerekletirimine ihtiyacm var:

    Yukardaki ekil bu durumda ortaya kan bamllklar gsteriyor.Bu durumdaMovieListersnf dier iki snfa da bal.Bu durumda MovieLister hem bir arayze

    hem de bu arayzn gerekletirimine bal.Bu durumda acaba MovieListersnfnnbamlln nasl sadece arayze drebiliriz?

    Bu durumu salamak iin uygulamann gerekletirimi derleme zamansrasnda deil de daha sonra eklenebilmesini salamalyz.Fakat bunun iinprogramn gerekletirim ayrmn ihmal eden bir yaps olmas gerekmektedir.Yaniprogram arayze uyan herhangi bir gerekletirimi derleme zaman dnda dakullanabilmelidir.

    Ayrca gerek hayat uygulamalarnda , bunun gibi yzlerce hatta binlerce snfkullanlmaktadr.Acaba bu kadar snf birbiriyle dzgn bir biimde nasl bir arayagelecekler?Nasl birletirilip bir uygulama haline dnecekler?te , birok

    framework bu sorunlar IoC rnts erevesinde hazrlanm containerlar ileyantlamaktadr.

    IoC(Inversion of Control) veya Dependecy InjectionHer ne kadaru an birok framework IoC gerekletirimi yaptklarn zellikle

    vurgulasalar da bu gerekletirim her frameworkn ortak zelliidir.

  • 8/14/2019 Hibernate IOC APEKER WwwJavaDiliCom

    6/25

    6

    Acaba IoC tanm yeterince anlaml m.Bu konuya bir de u adanbakalm,eskiden kullanc arayzleri yaplrken , arayzler program iinde dahiledilirdi.Yani gerekli arayz iin metodlar veya snflar yazlrd.imdi ise UIframeworkleri ile sadece belirli eventlara gre ve EventHandlerlarla bu ihalledilebilmektedir.Uygulama ana dngy ise verilerin deerlendirilmesi iinaltrmaktadr.Bu durumda UI kontrol uygulamadan UI frameworke gemitir.

    Fakat yukardaki rnekte bahsettiimiz rnekte , IoC sadece gerekletiriminnasl bulunduuna dairdir.rnekte listeleyen snf arama yapan snfngerekletiriminin direk kullanmak yerinde ortamda bulunan veya verilengerekletirimi kullanmtr.Bu yaklam duruma ynelik gerekli balmllklarnsisteme bir nevi enjekte edilmesini iermektedir.Bu yzden yntemin daha okDependency Injection (Bamllklarn Enjeksiyonu) diye adlandrlmas dahamantkldr.

    Dependency Injection Yntemleri

    Dependency Injectionn ana mant, ayr bir evirici snfn bulunmasdr.Bu

    snf gerekli arayz iin gerekli gerekletirimi yerletirir.Sonu olarak u ekilde birbamllk ortaya kar :

    Dependecy Injection salamann 3 yolu vardr :

    Setter Injection Constructor Injection Interface Injection

    Bu yntemler IoC iin ise syle gemektedir : Type 1 IoC (interface injection) Type 2 IoC (setter injection) Type 3 IoC (constructor injection).

    Setter Injection ya daType 2 IoC,yaralanlan hizmet ya da bileenlerin herbiriiin bir setter metodun kullanld ve daha sonra gerekletirimler iin gerekli

  • 8/14/2019 Hibernate IOC APEKER WwwJavaDiliCom

    7/25

    7

    konfigrasyon dosyalarnn ayarland bir yntemdir.Konfigrasyon dosyas olarakweb tabanl uygulamalarda ska kullanlan XML biimi kullanlabilir.Bu yntemSpring Framework ve Pico Container tarafndan kullanlan bir IoC yntemidir.

    Constructor Injection ya da Type 3 IoC,bir arayz iin gerekli

    gerekletirimin snfn constructoru iinde belirtilmesi yntemine dayanr. Bu yzdensnf constructorlar gerekli tm bamllklar ierir.Bahsettiimiz rnekte ki sonularlisteleyen snf , arayc snfn gerekletirimini ayarlamak iin constuctoru kullanr.

    Bu IoC yntemi PicoContainer ve ayrca Spring Framework tarafndankullanlan bir yntemdir. PicoContainer de snflar constructorlarn gerekli arayzgerekletirimlerin ayarlanmas iin kodlar bulundurduklar gibi ayrca sistem snflararasnda ki balantlarn ayarlanmas iin konfigrasyon containerlar ierirler.

    Interface Injection ya da Type 1 IoC , bamllklarn enjeksiyonu iinarayzler tanmlayan ve bunlar kullanan bir yntemdir.Bu yntemde bamllklartespit etmek iin gerekli arayzleri ieren containerlar kullanlr.Bu yntemi kullananframeworklere rnek olarak Avalon verilebilir.

    Bu yntemde , gerekli hizmetler ve bileenler iin enjeksiyon arayzleritanmlanr.Daha sonra bu arayzlerin gerekletirimi , kendilerine baml olansnflarca salanr.Ve daha sonra gerekli konfigurasyon iin bir snf yazlr.Buayarlamalar dosya olarak da ayarlanabilir.

    Service Locator(Hizmet Bulucu) , ise bir uygulamann ihtiya duyduuhizmetleri tespit eden nesnelerin bulunduu bir yntemdir.Bu metod IoCye alternatifolarak yaplmtr.Yaptmz rnei bu balamda yeniden ele alrsak , hizmet bulucuuygulamaya gerektii zaman bir arayc gerekletirimi salayabilmelidir.Bubamll baka bir nesne kaydryor.Bu durumu ematik olarak ifade edersek ,bamllklar :

  • 8/14/2019 Hibernate IOC APEKER WwwJavaDiliCom

    8/25

    8

    Burada Service Locator singleton olarak gerekletirirsem, bu durumdalisteleyici bu snf olutuu zaman istedii arayc gerekletirimini ele alabilir:

    class MovieLister...

    MovieFinder finder = ServiceLocator.movieFinder();class ServiceLocator...public static MovieFinder movieFinder() {

    return soleInstance.movieFinder;}private static ServiceLocator soleInstance;private MovieFinder movieFinder;

    IoC gibi bu teknikte de hizmet bulucuyu ayarlamamz gerekmektedir.Buayarlama hem kod hem de konfigrasyon dosyasyla yaplabilir.

    class Tester...private void configure() {

    ServiceLocator.load(new ServiceLocator(new ColonMovieFinder("movies1.txt")));}

    class ServiceLocator...public static void load(ServiceLocator arg) {

    soleInstance = arg;}

    public ServiceLocator(MovieFinder movieFinder) {this.movieFinder = movieFinder;

    }

    Ve test kodu olarak da :class Tester...

    public void testSimple() {configure();MovieLister lister = new MovieLister();Movie[] movies = lister.moviesDirectedBy("Sergio Leone");assertEquals("Once Upon a Time in the West", movies[0].getTitle());

    }

    Bu yntemin eksiklerinden birisi yazlan Service Locator snflarnn testedilebilirliinin az olmas.nk test iin herhangi bir ikinci Service Locator nesnesiyazlamyor.Bu yzden ilk bata bunlarn ok iyi tasarlanmas gerekiyor.

    Yukaridaki yntemin en nemli eksii , MovieListersnf sadece bir hizmetikullanm olmasna ramen , Service Locatore tamamen bal durumda.bu durumdaayrlm hizmet arayzleri kullanmak bu sorunu halledebilir.Listeleyici ii yapan snfServiceLocator snfn tamamen tanmlamak yerine sadece istedii hizmetler iin birksmn tanmlayabilir.

    Bu durumda listeleyici snf salayan ayn zamanda bir arayz deServiceLocator iin salamaldr.

  • 8/14/2019 Hibernate IOC APEKER WwwJavaDiliCom

    9/25

    9

    public interface MovieFinderLocator {

    public MovieFinder movieFinder();

    ServiceLocator, arayc nesneyi salamak iin arayz gerekletirir :

    MovieFinderLocator locator = ServiceLocator.locator();MovieFinder finder = locator.movieFinder();

    public static ServiceLocator locator() {return soleInstance;

    }

    public MovieFinder movieFinder() {return movieFinder;

    }

    private static ServiceLocator soleInstance;

    private MovieFinder movieFinder;

    Bu rnekte , static bir rnekti.Yani bamllklar karlamak iin metodlaryazdk.Fakat bunu alma zamannda yapabilmeliyiz.Bunun iin de dinamik ServiceLocator yapabiliriz.Bu sayede uygulama alma zamannda altraca hizmetegre gerekletirimleri tespit eder.

    1.3. Kullanm alanlar ?

    IoC birok frameworkn yapsnda bulunan bir rntdr.Her framework burnty kendine has yapsyla yorumlamtr.

    Gnmzde birok proje ok byk lekte yaplmaktadr.Byk lekteyaplmas bu projenin iine birden fazla frameworkn , alma aracnn dahilolmasna neden olur.Doal olarak mimariler bu tr projelerin ihtiyalarnkarlayabilecek ekilde yaplandrlr.Mesela Spring ; Spring famework , persistenceframework , web uygulamalar ve JDBC gibi eler iin soyutlama katmann kendibnyesinde bulundurmaktadr.

    IoC veya dier adyla Dependency Injection da frameworklerin byk projeleribirletirmeleri iin adeta bir gereklilik haline gelmitir.Bir ok framework IoCnin belirlitiplerini kullanmaktadr.Mesela PicoContainer , Type 2 ve Type 3 IoCkullanmaktadr.Spring frameworkde PicoConainer gibi Type 2 ve Type 3 IoCkullanmaktadr.Fakat her framework kendi mimarisine bal olarak belirli tiplereyounlamtr.PicoContainer Type 3 IoCye younlat gibi Spring daha ok Type2IoCye ynelmitir.

    Daha nce de birok kez bahsettiimiz gibi IoC , aslnda frameworkngerekten framework olmas iin gerekli bir etmendir.Bu yzden IoC her trlframework de bulunan bir rnt.Fakat bunun imdi ne kmasnn nedeni , belki deprojelerin gittike bymesi ve IoCnin giderek nem kazanmasdr.

  • 8/14/2019 Hibernate IOC APEKER WwwJavaDiliCom

    10/25

    10

    Zaten u an frameworkleri ne kartan zellii bir frameworkn bykprojeleri ne kadar sorunsuz ve etkili ele alabilecei.Bu yzden artk bazframeworkler yeterli olmad iin piyasadan kalkyor.

    Sonu olarak kullanm alan olarak IoC ok geni ve bu alan giderek artmaya

    devam ediyor.Projeleri bymesi de bu art tetikleyen nemli etmenlerden birisi.

    1.4. IoC tiplerinin artlar ve eksileri ?

    Her IoC tipinin dnl amac vardr ve her bir tipin duruma zg olarakavantajlar ve dezavantajlar vardr.Bu yzden oluturulan IoC tipi projeye uygunolarak seilirken bu tr kriterler gz nnde bulundurulmaldr.

    (Type 2 IoC) Setter ve (Type 3 IoC)Constructor Injection

    Constructor Injection , biraz daha fazla kod gerektiriyor.Bamllklar iinfazladan snflar yazlmas gerekiyor.Az miktarda bamllk iin bu fazla nemli deilfakat eer ok fazla varsa bu sknt oluturuyor.

    u da bir gerek ki , Seter Injection ile Constructor Injection arasndaki farkaslnda nesne ynelimli bir problem.Bu problem , acaba alanlar constructorla mdolduracaz yoksa setter alanlarla m?

    Constructor oluturmann avantajlarndan birisi , parameterleri girilen birconstructor uygulamaya nerede nasl bir nesnenin oluaca hakknda kesin bir bilgiverir.Ayrca constructor ile nesnelerin oluturulmas deimez nesnelerin settermetodlara gre daha iyi saklar.Bu da projenin daha salam bir tabana oturmasnsalar.Fakat istisnalar da bulunmaktadr.Uzun parametrelerin kullanlmas

    constructorlar

    n imesine neden olur.ok fazla parametresi olan bir constructorasahip olan bir snfn aslnda birden fazla snfa paralanmas gerekir.

    Ayn zamanda bir nesneyi oluturmann birden fazla yolu varsa bunuconstructorlarla belirtmek zordur.nk ayn snf iin farkl constructorlaroluturmak iin en fazla parametre tipi veya says deitirilebilir.Bu durumda Factorymetodlar kullanlabilir.Fakat bu durumda da bir yanllk var , nk Factorymetodlar static metodlar ve bunlarn arayzlerde tanmlanmas imkansz.Bunakarlk bir Factory snf oluturulabilir.Bu da tabii ki baka bir hizmet snfna karlkgelir.

    Ayrca ok kaltml sistemlerde bu sistem ok problem karabilir.Her kaltm

    snf ayr bir constructor yazmak , ayrca kendi parametreleriyle , ok zor olabilir.

    Buradan anlald zere 2 sistemin de kendine has zellikleri var ve projetakmlar bunlara gre herhangi birini semek zorundalar.Bu yzden frameworkler ,mimarilerinde her 2 teknie de yer veriyorlar.

  • 8/14/2019 Hibernate IOC APEKER WwwJavaDiliCom

    11/25

    11

    Kod veya Konfigrasyon Dosyalar

    Yazlm bileenlerinin bir API vastasyla kod ile veya konfigrasyondosyalaryla balanmas birbirinden ok farkl fakat kartrlan bir konudur.Yazlmnbirok yere kurulaca dnlrse burada mantkl seim konfigrasyon dosyalarkullanmaktr.Bu dosya iin genel olarak XML dosyas kullanlr.Fakat bazen kodkullanarak birletirme ilemini yapmann tercih edildii durumlar daolabilmektedir.Mesela ok fazla kuruluma ihtiyac olmayan kk bir programnparalarn birletirmek iin kod kullanmak daha kolaydr.

    Ayrca dikkat edilmesi gereken dier konu da , kodlamann neredekarmaklaaca.Belirli koullarda ok fazla kodun yapabilecei i birka XMLsatryla halledilebilir.

    Konfigrasyon iinin kodla yaplmasnn getirdii bir dezavantaj dakonfigrasyon ayarlarnn programc olmayan birisi tarafndan yaplamamas.Bu dauygulamann bakmn zorlatrmaktadr.Fakat her bileenin kendine haskonfigrasyon dosyasnn bulunmas da ok fazla konfigrasyon dosyasnnolumasna ve bu nedenle karklk olumasna neden olacaktr.

    Sonu olarak bir projede yaplabilecek en iyi hareket , proje konfigrasyonunukod ile hallederek balamak fakat konfigrasyon dosyasn opsiyonel olarak daiermektir.

    Ayarlar , Kullanmdan Ayr Tutmak

    nemli olan bir nokta var ki bu da servislerin konfigrasyonlar servislerinkendilerinden ayr tutmaktr.Bu aslnda gerekletirimleri arayzlerden ayrmayayarayan en nemli rntlerden birisidir.Bu sistem nesne ynelimli programlama dakullanlan yntemlerdendir.

    Bileenlerin ve dier hizmetlerin kullanld bir durumda byle ayrmlarnyaplmas proje iin hayati nem tar.Konfigrasyonlarn veya programda kullanlanparalarn birbirinden tamamen ayrk olmas programn kolaylkla farkl paralarlaveya kurulumlarda alabilmelerini salar.

    Bir uygulama haz

    rlan

    rken yap

    lacak en nemli seimin hizmetleri ,ayarlamalarndan bamsz tutmak olduu unutulmamaldr.

  • 8/14/2019 Hibernate IOC APEKER WwwJavaDiliCom

    12/25

    12

    2. Spring Framework

    Spring Framework J2EE mimarisinde gelitirilmi birok frameworkden birisiolarak dnlebilir.Fakat Spring birok zellii bakmndan dier frameworklerdenayrlmaktadr.Bu zellikler:

    Dier birok frameworkn deinmedii birok sorunla ilgili zmsunar.Spring , i nesnelerinin(Business Objects) ynetimineyounlayor.

    Spring hem ok amal hem de modler bir frameworktr.Springkatmanl bit altyapya sahiptir.Yani gelitirimi yapan kii istediiherhangi bir katman seip onu kullanabilir.Ayrca mimarisi kendiierisinde tutarl bir yapdadr.Mesela Spring , JDBC kullanmnbasitletirmek iin kullanlabilir.Spring projelerin iine ,artrmsal olarak ,kolaylkla yerletirilebilir.

    Spring batan aaya kolaylkla test edebilecek kodlaryazabilmesi iin gelitirilmitir.Spring test amac gdlen projeler iin

    birebirdir. Spring nemi gittike artan bir entegrasyon aracdr.Springin

    uygulama gelitirme alanndaki rol birok yazlm salayc tarafndananlalmtr.

    Spring birok uygulamann altyap ile ilgili birok konuya deinen birframeworktr.Spring kurulu uygulamalar iin light weight zmlersunmaktadr.Spring MVC bir altyap sunmaktadr, ayrca ok iyi yaplanm kural ddurum hiyerarisine sahiptir.

    Spring , modleritesi sayesinde tamamna ihtiya olmadan belirli paralarnnkullanlabilmesine izin verebilmektedir.Bu balamda bir uygulama gelitirirken Spring

    , Struts mimarisiyle beraber ya da Hibernate ile entegre , JDBC katmanyla beraberkullanlabilir.Bu yzden Spring kullanszla yer vermeyen,herhangi bir yerde birparasnn kullanlabilecei , (kullanld yere gre deerlendirirsek) birframeworktr.

    Bu balamda Spring u an gelitirlmi birok frameworkn ierdii zellikleribnyesinde barndrmakta ayrca tutarllk , modularite ve gelitirim asndan bir okyeni zellik sunmaktadr.Spring mimarisi sayesinde renim konusunda aklk vesadelik sunmaktadr.

    Spring ubat 2003 ylnda ak kaynakl bir proje bir proje olarak balam vebu zaman sreci ierisinde ok ilerlemitir.Mimari olarak Spring 2000 yl vencesinde tanmlanan tasarm konseptlerine dayanmaktadr.u an 20 adet gelitiriciile Spring frameworkn ilerleme sreci devam etmektedir.

  • 8/14/2019 Hibernate IOC APEKER WwwJavaDiliCom

    13/25

    13

    2.1. Frameworke genel bak

    Spring birok ilevsellik ve zellie sahiptir.Bunlar ok iyi tasarlanm veorganize edilmi yedi modlden olumaktadr.

    Spring Core

    Bu modl Springin en temel parasdr ve Dependecy Injectionzellii ile bean containern ilevselliinin ynetilmesine izin verir.Burada buolay salayan temel konsept ise uygulamann ihtiyac olan programmatiksingletonu salayan ve bamllklarn zelliklerini ve ayarlarn programmantndan ayran BeanFactorydr.

    Context Package

    ekirdek(Core) paketinin stnde yer alan bu modl JNDIa benzeyenbirekilde eriim beanlerine framework usl eriimini salar.Context paketizelliklerini Beans paketinden kaltr ve buna metin iletiimi destei ekler.

    DAO Package

    DAO paketi gereksiz JDBC kodlamalarn ve Veritaban reticilerinezel hata kodlarn kaldran JDBC soyulama katmann sunmaktadr.Ayrca ,bu katman JDBC ilemlerini programlama ve tanmlama yntemleri ilegerekletirme olana sunmaktadr.

    ORM Package

    ORM paketi , JDO,Hibernate ve iBatis gibi nesne ilikisel elemeAPI(ORM API)leri iin entegrasyon salamaktadr.Paketin kullanmyla , bunesne ilikisel eletiricilerden herhangi biri Spring ile beraber entegre olarakkullanlabilir.

  • 8/14/2019 Hibernate IOC APEKER WwwJavaDiliCom

    14/25

    14

    AOP Package

    Bu paket , cephe ynelimli programlama(aspect oriented programming)yapmaya olanak verir.Bu ilem , ilevsellik olarak ayrlmas gereken kodksmlar iin kesici metodlar(interceptor methods) yazmaya olanak vererek

    salanr.Kaynak seviyesinde yardmc veriler(metadata) kullanlarakdavransal zelliklerin her tipini kodunuzda ierebilirsiniz.

    WEB Package

    Springin Web paketi , Springin cok blml ilevsellik , servlet listenerkullanma ve web ynelimli uygulama balam gibi temel web entegrasyonzelliklerini ierir.

    WEB MVC Package

    Bu paket web uygulamalar iin Model-View-Controller gerekletirimini

    salar.Springin MVC gerekletirimi herhangi bir alelade gerekletirimdeildir.Bu gerekletirim model kodu ile web formlarn birbirinden tamamenayran ve Spring dier zelliklerinin kullanmna izin veren bir gerekletirimdir.

    Yukarida anlatlan altyaplarla , Spring hemen hemen tm senaryolarlakullanlabilir, appletlerden tutun da ok karmak enterprise uygulamalarna kadarbirok uygulama Springin web framework ve ilembilgi ynetimi ile yaplabilir.

  • 8/14/2019 Hibernate IOC APEKER WwwJavaDiliCom

    15/25

    15

    Yukarida Springin birok zelliini kullanan bir web uygulamasnn nasl bir

    yapda olaca grlmektedir. TransactionProxyFactoryBeans kullanm sayesindeweb uygulamas,Enterprise JavaBeans tarafndan salanan barndrc ynetimlibilgiilem kullandmz zaman olaca gibi , tamamen ticarisel(transactional).mant ksm Springin Dependency Injection barndrcsnn ynetecei basit

    POJOlarla kolaylkla gerekletirilebilir.Email yollama ve geerlilik snamas gibi webkatmanndan bamsz hizmetlerle , geerlilik snamas gibi ilemleri neredeyapacanz seebilirsiniz.Spring ORM destei Hibernate,JDO ve iBatisientegredir.HibernateDAOSupport ile , varolan Hibernate eletirmelerinizi tekrarkullanabilirsiniz. Form kontrolrler , web katmanyla alan modelini saydam olarakentegre eder.Bu sayede HTTP parametrelerini aktarmak iin ActionForm veya bakasnflara ihtiya kalmaz.

    Baz durumlarda , projeler tamamen farkl bir frameworke gemeye izivermez.Spring hibir zaman uygulama gelitirenleri , kendinin tmn birdenkullanmaya zorlamaz.u an bulunan WebWork , Struts gibi frameworkler Spring arakatmanyla kolaylkla proje ile entegre olabilir.Yaplacak tek ey Application Contextile i mantn balamak ve WebApplicationContext kullanarak Web kullanc

    arayzn entegre etmektir.

    Spring ayrca Enterprise Java Beans iin soyutlama katman desteisalamaktadr.Bu ekilde EJB ile yaptnz almalarnz , varolan POJOlarnzStateless Session Beans ile sararak kolaylkla tekrar kullanabilirsiniz.

  • 8/14/2019 Hibernate IOC APEKER WwwJavaDiliCom

    16/25

    16

    SPRING ATISI NASIL ALIIR

    Spring frameworkn modulleri arasnda Core ksm asl fonksiyonaliteyi tar.Core modlde IoC uygulanr ve bamllk nesneleri kontrol edilir. Bu modlde grevalan en nemli snf Bean Factory snfdr.

    Bean Factory btn Java nesnelerini konfigre eden ve yneten bir arayzdr.XMLBeanFactory snf XML dosyalarndaki nesne tanmlarn okuyup, nesneleriynetirken, ListableBeanFactory snf ise property dosyalarndaki nesneleri okuyupynetir. Bean Factory oluturulurken Spring tm nesnelerin konfigrasyonlarnbalatr. Singleton olan tm nesneler Bean Factory'in bir nesnesi oluturulurkenberaber oluturulurlar. Dier nesneler ise uygulamann iinde ne zamankullanlacaklar ise o zaman oluturulurlar.

    Definition yani tanmlama durumda nesneler constructor'lar arlarak (tmnesnelerin constructor'lar kod ierisinde oluturulmaldr) oluturulurlar. Pre-initialized duruma geilir ve bu durumda ilk nce baml nesneler birbirine balanr,bamllklar kontrol edilir, setter metodlar kullanlarak zelliklere deerler atanr,

    nesnelere bean factory'leri verilir ve son kontrollerle bu durum tamamlanr. Artkuygulamann kullanmna sunulabilir hale (Ready duruma) getirilmi olur. Uygulamabu nesneleri kullanr ve nesnelerin ii bittii zaman veya container yok edileceizaman destroy() metodu arlarak nesneler yok edilerek nesnelerin hayat emberisona erdirilir. Btn bu iler Spring'in lightweight container'i ierisinde Inversion ofControl prensibi ile yaplrlar.

    Peki nesneler nasl oluturuluyor diye dnrsek, bu sorunun cevab uekilde olur. Yazlan snflarn bir ekilde Spring'in lightweight container'i iletantrlmas gerekmektedir. Bunun iin aslnda ok farkl yollar bulunmaktadr (XMLdosyalar , property dosyalar, LDAP, RDBMS,vb..), Fakat bunlar arasnda en okkullanlanlan ve en kullanl olan XML dosyalar ile tanmlamadr.

    Burada ComputerCompany isimli s

    n

    f

    m

    z iin bir tan

    m oluturuyoruz. lkbata bu snftan oluacak olan nesne iin company isimli bir indis (id ) veririz, buindis ile artk bu nesnemize eriiyor olacaz. Bu nesnemizin engineer diye birzellii olsun ve bu zelliin d dnyadaki engineer indisli bir nesneye bamllolsun. te byle bir nesne ii oluturulacak tanm yukarda gibi olacaktr. Burada idetiketi verilecek olan indisi, class etiketi snfn ismini, property etiketi zelliinismini, refise referanslanacak olan nesnenin indisini gsterir. Bu etiketler ilelightweight Spring container'imizi bir bakma ekillendirmi ve konfigre etmiolmaktayz.

  • 8/14/2019 Hibernate IOC APEKER WwwJavaDiliCom

    17/25

    17

    Bu etiketleri iyi kullanmak Spring uygulamalar iin ok nemlidir. Uygulamannperformansn da bu etiketlerle ekillendirebilirsiniz. Bir rnek vermek gerekirse,nesne tanmlarnda aksi bildirilmedii takdirde tm nesneler singleton olarakoluturulur, eer bir snfn birden fazla nesnesini oluturacaksnz bu etiketi falseyapmanz gerekmektedir. Yine nesneler tanmlanrken aksi sylenmedike tmnesneler bean factory tarafndan bean factory ile birlikte yaratlrlar. Eger ok fazla

    nesneniz var ise bu ilem uzun srebilir, bu da size performans kayb olarak geridnebilir. Bu yzden kullanp kullanmayacanz bilmediiniz nesneleri lazy-init=true etiketiyle tanmlayp istendigi zaman yaratabilirsiniz. Spring uygulamalarnzdabu etiketlerin en optimum ekilde kullanlmas tavsiye edilir.

    2.2. Spring Framework ve IoC container

    Springin en nemli iki paketi org.springframework.beans veorg.springframework.context paketleridir.Bu paketlerdeki kodlar Springin IoCzelliklerini salar.BeanFactory snf herhangi bir depolama biimini kullananherhangi bir bean snfn ayarlayabilecek kapasitede gelimi bir ayarlama

    mekanizmasndr.ApplicaionContext snf ise Beans Factory snfna dayanan(altsnf olan) ve Spring AOP ile entegrasyon, mesaj ynetim , olay yaylma(eventpropagation) gibi baka islevler katan nemli bir snftr.Ksacas , BeanFactoryayarlama ortamn ve temel ilevleri salarken , ApplicationContext bu snfnzelliklerini gelitirir ve J2EE yeteneklerini iine katar.

    Springin ekirdei olan org.springframework.beans JavaBeans ilealabilecek ekilde tasarlanmtr.Bu paket kullanclar tarafndan direk olarakkullanlmaz, daha ok Springin ilevselliini destekler.BeanFactory bu paketinsoyutlama katmandr.Bu snf snflarn isimleriyle retilebilmelerini salayan ve busayede nesneler arasndaki iikileri yneten snftr.

    Bean Factory iki tipte nesneyi destekler : Singleton : Bu durumda , bir isimdeki nesnenin paylalan bir rnei

    vardr.Bu durum , varsaylan olarak ve belki de en ok kullanlan tipidir. Prototype (non-singleton) : Bu durumda , her eriim yeni,bamsz bir

    nesnenin olumasna neden olacaktr.

    Spring kapsaycs , nesneler arasndaki ilikileri ynettii iin , POJOlarnsaydam olarak ilikilendirilmesi ve hot-swapping gibi kullanclara alma zamandeiikliklerinin yanstlmad hizmetlerde nem kazanr.Dependency Injectionnsalad en byk gzelliklerden birisi de tm bu ilerin saydam bir biimde , hibirAPI iin iine girmeden gerekletirilebilmesidir.

    org.springframework.beans.factory.BeanFactory , basit bir arayzdr vebirok ekilde gerekletirilebilir.BeanDefinitionReader arayz , BeanFactory ileyardmc bilgileri(metadata) birbirinden ayrr.Bylece Spring tarafdan salananBeanFactory gerekletirimleri her trl yardmc veri ile alabilir.En ok kullanlanBeanFactory gerekletirimleri :

  • 8/14/2019 Hibernate IOC APEKER WwwJavaDiliCom

    18/25

    18

    XmlBeanFactory : simleri verilen nesnelerin snflarn ve zelliklerinitanmland XML yaplarn okuyan ve yorumlayan snfdr.

    DefaultListableBeanFactory : BeanFactorynn programmatik olarakoluturulmasn veya zellik dosyalarndan okunarak bean zelliklerininayarlanmasn salayan snftr.

    Her tanm bir POJO veya FactoryBean olabilir.FactoryBean arayz bir nevidolaylama salar.Genel olarak bu arayz , AOP veya baka yaklamlar kullanarakvekil(Proxy) nesneler oluturulmas iin kullanlr.Bu kavramsal olarak EJBinterception yntemine benzer , fakat pratik olarak daha basit ve etkilidir.

    BeanFactory kapsaycs itibariyle , Spring bir IoC kapsaycs olaraknitelendirilir.Fakat Spring kapsaycs daha ok Dependency Injection olaraktanmlanmtr.

    IoC , gereklemesi istenen olaylarn koddan soyutlanarak frameworknsorumluluu altna girmesini salar. Dependency Injection , kapsayc APIye olanak bamll kaldran bir IoC tipidir. Bir bileen X snfna ihtiya duyduunda ,

    kapsaycy ararak x snfn talep eder , Dependency Injection ile kapsayc busnfn nerede olduunu tespit eder.Bunu metod imzalarn tespit ederek ve XML ayardosyalarn kullanarak yapar.

    Dependency Injection n en byk iki esidi : Setter Injection ve ConstructorInjectiondr.Spring bu iki eidi de kullanlabilmesine izin verir.Hatta bu yntemiberaber kullanabilirsiniz.Dependency Injection birok ynten avantajldr :

    Bileenler birlikte altklar dier bileenlere alma zamanndabakma ihtiyac duymazlar,bylece yazlmalar ve bakmlar ok dahabasittir.Springde bileenler bamllklarn JavaBean setter metodlarveya constructorlar vastasyla bildirirler.

    Ayn nedenden tr , gelitirilen uygulamalar test etmek ok dahakolaydr.

    yi bir IoC gerekletirimi , tre ball korur.IoC ile bamllklar kod ilebelirtilir ve tr dntrmleri iin framework sorumludur.Bu uygulamagelitiricinin bu tr ykmllklerden kurtulmasn salar.

    Bamllklar aktr.Constructor veya JavaBean zellikleri ile belirtildiiiin tm projeyi incelemeden , ney yapld hakknda bilgi sahibiolabilirsiniz.

    Spring BeanFactory snflar lightweight nesnelerdir.Appletlerin iine , Swinguygulamalarna baar ile yerletirilebilirler.Herhangi bir kurma ilemine ihtiyaduymaz veya barndrcdan dolay herhangi bir balatma zaman gecikmesiolmaz.Bu framework asndan ok nemli bir artdr.

  • 8/14/2019 Hibernate IOC APEKER WwwJavaDiliCom

    19/25

    19

    BeanFactory kavram Springin bandan sonuna kadar kullanlmtr veSpringin i yap olarak tutarl olmasnn asl nedenidir.Spring ayrca IoCyi tamkapsaml bir framework olarak batan aagya kullanmasyla dier frameworklerdenayrlr.

    ApplicationContext snfda BeanFactorye u ek zellikleri salayan bir

    altsnfdr :

    Mesaj arama , yerelletirme ve uluslararaslatrma Olay ynetim mekanizmas , uygulama nesnelerinin olay yaynlamasn

    ve almasn salar Uygulama zel veya genel bean tanmlarnn alglanmas Tanabilir dosya ve kaynak eriimi

  • 8/14/2019 Hibernate IOC APEKER WwwJavaDiliCom

    20/25

    20

    3.Spring IDE

    3.1.Spring IDE nedir ?

    Spring IDE , Spring framework projesinin bir alt projesidir ve Bean Factory

    ayar dosyalar

    yla daha kolay al

    labilmesi iin yaz

    lm

    bir Eclipse plug-indir.SpringIDE bean ayar dosyalar ile daha rahat alabilmek iin XML editor,geerlilikdenetimcisi gibi birok ara sunmaktadr.Bu proje ilk olarak SpringUI adyla kmolup daha sonra Spring IDE olarak ismi deitirilmitir.

    u an en son olarak 1.2.5(11 Ocak 2006 srm km olup,Eclipse 3.1 ilealmaktadr.Spring IDE gereksinim olarak ayrca GEF(Graphical EditingFramework)e ve WTP 1.0a ihtiya duymaktadr.

    3.2.Spring IDEnin zellikleri ?

    Spring IDE aadaki zellikleri sunmaktadr :

    Proje doas(Project Nature) : Spring bean ayar dosyalarn destekleyen biryardmcdr.Herhangi bir proje seilerek bu projeye kolaylkla Spring ProjectNature eklenebilir.Bu durumda proje iin gerekli bean ayar dosyalar ve altyapayarlanr.

    Arttrmsal ina edici(Incremental Builder) : Spring projesini artrmsalolarak ina eden ve bu ilemler esnasnda Spring projesinde bulunan tmbean ayar dosyalarn geerlilik denetiminden geiren bir aratr.

    Grntleyici(View) : Spring projelerini ve bean ayar dosyalarn aga

    biiminde grntleyen bir arat

    r.

    Editor : Tanmlanm tm bean ayar dosyalarn grntleyen bir aratr.Bugsterim grafiksel olarak yaplr ve bean dosyalar arasndaki balantlar da bugrafikte yer alr.Bu grnm tipleri bir ok kapsamda alabilir :

    o Grnmde eilen bir ayar dosyasndao Grnmde seilen bir ayar grubundao Grnmde seilen bir bean dosyasyla

    Grafiksel Editor : Spring WebFlow iin kullanlan ayar dosyalarn grafikselolarak dzenlemek iin bu ara kullanlr.

    XML Editor: Spring Bean ayar dosyalarn dzenlemek ve geerlilik kontrolyapmak iin kullanlan yararl bir aratr.Bu editor Spring IDE iine entegreolduu iin zel ierik yardmcs ve zel ablon destei gibi zellikleritamaktadr.

  • 8/14/2019 Hibernate IOC APEKER WwwJavaDiliCom

    21/25

    21

    4.rnekSpring IoC taban ekirdek paketlerine dayand iin rneimizi bu pakete

    dayanarak vereceiz.Bu balamda projede IoCyi salamak iin BeanFactory snfnve ayar beanlerinin kullanacaz.

    rnek olarak web sayfalarnda ska kullanlan , kullanc geerliliini

    denetleme modln gerekletirmeye alacaz.Springin modler bir yapsolduu iin web uygulama arayzn veya dier modllerini kullanmaya gerekkalmadan , bu projeyi bir java uygulamas olarak gerekletirebiliriz.

    Senaryo olarak , bir kullanc yazdmz uygulama ile geerlilik denetimindengeecektir.Geerlilik sonucu gerekli snflarca geri bildirilecektir.Geerlilik denetimiyaplrken kullanc listesi bir veritabanndan veya bir baka dosyadan veyahazrlanm kullanc dizisinden alnabilir.Bu konuda rnekte sadece bir kullancyrnekledik.rnek , Springin yaps ve IoC sayesinde kolayca ok kullancl birsisteme dntrlebilir.

    lk olarak i mant snflarmz oluturuyoruz ,Aada ise ifresi ve kullancismi olan tipik bir kullanc snf ve bunu ynetmek iin yazlan arayz :

    (User.java)

    package userAuthentication;

    public class User {private String login, password;

    public User(String login, String password) {this.login = login;this.password = password;

    }

    public String getPassword() {return password;

    }

    public String getLogin() {return login;

    }

    }

  • 8/14/2019 Hibernate IOC APEKER WwwJavaDiliCom

    22/25

    22

    (UserManager.java)

    package userAuthentication;

    public interface UserManager {//Kullancnn tabanda bulunup bulunmadn test eder

    public boolean exists(String login);

    //Kullanc ismi verilen kullancy dnderirpublic User get(String login);

    }

    Bu snf kullanclarn ynetimi iin gerekli soyutlamay yapan snfmz.Bu snfgrld zere bir arayz , bu snfla ilgili yazacamz gerekletirimler daha sonraframework tarafndan otomatik atanacak.Bu arayzn basit bir gerekletiriminiyapalm:

    (SimpleUserManager.java)

    package userAuthentication;

    public class SimpleUserManager implements UserManager {public boolean exists(String login) {

    return "agp".equals(login);}

    public User get(String login) {return new User(login,login);

    }}

    Grdnz gibi , bu ksma istenirse veritaban ilemleri , dosya ilemleriveya hafza ilemleri gibi kullanc alm iini yapan kod gmlebilir.Ayrca birden okgerekletirim yapp bunlar ynetebilirsiniz.Kullanc geerliliini denetleme ileminisapan hizmet snf ise :

    (AuthenticationService.java)

    package userAuthentication;

    public class AuthenticationService {

    private UserManager manager;

    public AuthenticationService(){}

  • 8/14/2019 Hibernate IOC APEKER WwwJavaDiliCom

    23/25

    23

    public boolean authenticate(String name, String password){

    if (getManager().exists(name)) {User user = getManager().get(name);return user.getPassword().equals(password);

    }else{

    return false;}

    }

    //Kullanc yneticiyi ata , geri arm metodu(callback)public void setManager(UserManager manager) {

    this.manager = manager;}

    }

    Tm bu snflar iin bean ayar dosyas oluturacaz.Burada tanmladmz

    beanlar her gerekletirimimizi isimler halinde tutacak.Gerektii zaman iseBeanFactory araclyla bu tanmlarla ortamdaki gerekletirimler kullanlacak

    (bean.xml)

    altrmak iin kullanacamz ana altrlabilir dosya ise :

    (AuthenticateUser.java)

    import userAuthentication.AuthenticationService;import org.springframework.beans.factory.xml.XmlBeanFactory;import org.springframework.core.io.ClassPathResource;

  • 8/14/2019 Hibernate IOC APEKER WwwJavaDiliCom

    24/25

    24

    public class AuthenticateUser {

    public static void main(String[] args) throws Exception {//Bean dosyasn alClassPathResource res =

    new ClassPathResource("beans.xml");

    XmlBeanFactory beanFactory = new XmlBeanFactory(res);

    //Denetleme iin gerekli snf alAuthenticationService as = (AuthenticationService)beanFactory.getBean("authenticationService");

    //Test yapSystem.out.println("AGP geii onayland

    as.authenticate("agp", "agp"));

    System.out.println("AliGokalp geii onayland = " +as.authenticate("AliGokalp", "gir"));

    }}

    Bu rnekte Dependency Injection ya da IoC yntemi olarak Setter Injectionkullandk.Dikkat ederseniz AuthenticationService snfnda UserManagersnfnatamak iin bir set metodu kullandk.

    Eer Constructor Injection kullanacak olsaydk , AuthenticationServicesnfnda UserManagerksmnconstuctor kullanarak atayacaktk.

  • 8/14/2019 Hibernate IOC APEKER WwwJavaDiliCom

    25/25