Spring Framework Dersleri 4 - Injecting Simple Values & by Using SpEL
Jul 8, 2017
Merhabalar arkdaşlar. Bu yazıda Spring içerisinde Simple Values Injecting ve Injecting Values by Using SpEL konularını işleyeceğiz.
Simple Values Injecting
Simple Values Injecting konusundan anlamamız gereken basit değerleri yani önceden tanımlı değerleri XML içinde tanımlayıp kullanabilmek ya da class içerisinde yine Spring yardımı ile
kullanabilmektir.
InjectSimple.java
InjectSimple sınıfı içerisinde name, surname ve age adında üç paramtre ve bunların get-set metotlarını tanımlıyoruz. Main metodu içerisinde de injecting-simple-values.xml dosyasını
yükleyip içerisinden injectsimple bean’ini çağırıyoruz. Son olarak da çağırdığımız bean’den oluşan nesneyi konsola yazdırıyoruz.
injecting-simple-values.xml
injecting-simple-values.xml dosyasında InjectSimple sınıfını kullanarak injectsimple id’li bean’i tanımlıyoruz. Bu tanımlama sırasında da p: ifadeleri ile sınıf içerisindeki
alanları çağırarak değerler atıyoruz. Örneğin name alanı için p:name=”Onur” şeklinde bir atama yapıyoruz.
Ekran Çıktısı
Ekran çıktısında görebildiğimiz gibi XML içinde tanımlı değerler injectsimple değişkenine set edildi.
Spring bize ayrıca XML kullanmadan direk sınıf içerisinde de değer ataması yapma imkanı sunar. Hemen bunu örneklediğimiz sınıfımıza bakalım. Öncelikle yukarıdaki XML içerisindeki
injectsimple id’li bean tanımlamasını silelim.
Sınıf içerisinde @Service(“injectsimple”) satırı ile sınıfımızı XML’de yer almaksızın Spring’e kaydettirdik. Her bir değişkenimizi ise @Value notasyonu ile işaretleyip
notasyona verilen değerler ile atama yapıyoruz. Main metodu içerisinde de her ne kadar bean’imiz içerisinde tanımlı olmasa da XML’i çağırıp yüklüyoruz ve ardından injectsimple
değişkenimizi oluşturup konsola yazdırıyoruz.
Injecting Values by Using SpEL
Spring 3’den itibaren Spring içerisine değerleri Spring Expression Language ile inject etme imkanı getirilmiş. İster XML yolu ile ister de notasyon yolu ile bir bean içindeki alanlar
SpEL ile diğer bean içerisinde inject edilebiliyor. Şimdi bu işlemin nasıl yapıldığına bakalım.
InjectSimpleConfig.java
InjectSimpleConfig sınıfı içerisinde name, surname ve age alanalrının tanımı ve onlara ait get-set metotları yer alıyor. Sınıf içerisinde alanalrın ataması baştan yapılmış vaziyette.
InjectSimpleSpel.java
InjectSimpleSpel sınıfı InjectSimpleConfig sınıfındaki ön tanımlı değerleri az sonra XML içerisinde inject edeceğimiz sınıf. Gördüğümüz gibi InjectSimpleConfig ile aynı alanlara sahip.
injectspel.xml
injectspel.xml dosyası içerisinde 2 adet bean tanımı var. Bunlardan birisi default değerlerin tanımlı olduğu InjectSimpleConfig sınıfını tanımlayan injectsimpleconfig bean’i, diğeri ise
InjectSimpleSpel sınıfını tanımlayan injectsimplespel bean’i. Spring Expression Language adı verilen ifade içerisinde #{} ifadesi ile bizler başka bir bean içerisinde değeri
alabiliyoruz. Örneğin burada p:name=”#{injectsimpleconfig.name}” ifadesi injectsimpleconfig bean’inden name alanını al ve injectsimplespel bean’indeki name alanına ata demektir.
Main metodu olan sınıfı çalıştırdığımda sonuç şöyle:
Bu yazı için son olarak da notasyonla bu işi nasıl yapabildiğimize bakalım.
Yukadıraki XML’de yer alan injectsimplespel id’li bean tanımını silelim ve InjectSimpleSpel sınıfımızı şu şekilde güncelleyelim:
InjectSimpleSpel sınıfımızı @Service notasyonu ile işaretledik ve XML’e kaydettirmeden kullanıma hazır hale getrdik. Az önce XML dosyasında yaptığımız gibi #{} ifadesini @Value
notasyonu içerisinde kullanarak aynı şekilde injectsimpleconfig üzerinden diğer bean’deki alanlara ulaşarak onları kendi bean’imize set ettik. Main metodu içerisinde de injectSimpleSpel
nesnesini çağırarak ekrana yazdırdık. Sonuç da şu şekilde:
Bu yazıda anlatacaklarım bu kadar arkadaşlar. Simple Value Injection konusunu öğrenmiş olduk. Başka yazıda görüşmek üzere.