Spring – Ders 7 Spring Expression Language (SpEL) – 1
Merhaba Arkadaslar,
Son bir kac derstir Spring wiring konusunu islemistik .Bu Spring dersimizde , Spring Expression Language konusunu isleyecegiz.
Spring Expression Language ile;
- Beanler arasinda idleri araciligiyla referansta bulunabilir.
- Ilgili bean idli sinifin metotlarina ulasabiliriz ( invoke)
- Matematiksel,iliskisel, mantiksal islemlerde bulunabilir.
- Regular Expression ifadeleri kullanabiliriz.
- Collection lar uzerinde calisabiliriz.
Bu yazimda ilk iki maddeyi isleyecegim. Sonraki yazilarimda devami gelecek insallah 🙂
Literal Expression
Literal, degiskenlere atanan degerler demektir. Ornegin ;
int a=5; boolean b=true; char c= 'J'; char d="Levent";
Burada 5 bir integer literaldir, true boolean literaldir gibi..
Ilk olarak degiskenlere deger atamak icin SpEL den yararlanacagiz.
ilk sinifimiz ile baslayalim.
Bu sinifimizda String , int , boolean , char, float turunde degiskenlerimiz (instance variables) ve getter/ setter metotlarimiz var.
SpringExpression.java
package erguder.levent_07.spel.literals; public class SpringExpression { private String fname; private String lname; private int age; private char gender; private boolean job; private float salary; // getter ve setter metotlar public void write() { System.out.println(fname+ " " +lname + " " +age + " " + gender + " "+ job+ " " + salary); } }
xml dosyamizda bean tanimlamasi yapalim ve #{} isaretinden yararlanarak deger atamasi yapalim.
tutorial_07_literals.xml
<bean id="springExpressionId" class="erguder.levent_07.spel.literals.SpringExpression"> <property name="fname" value="#{'Levent'}"></property> <property name="lname" value="#{'Erguder'}"></property> <property name="age" value="#{23}"></property> <property name="gender" value="#{'m'}"></property> <property name="job" value="#{true}"></property> <property name="salary" value="#{100.0}"></property> </bean>
String ve char turundeki degiskenlere atama yapmak icin tek tirnak kullanilmasi gerekmektedir. int , float ve bolean degiskenler icin kullanmasak da olur.
SpELTest.java
public static void main(String[] args) { ApplicationContext context = new ClassPathXmlApplicationContext("tutorial_07_literals.xml"); SpringExpression se = (SpringExpression) context.getBean("springExpressionId"); se.write(); }
Test sinifimizi calistirdigimizda Cikti olarak su sonucu aliriz ;
Levent Erguder 23 m true 100.0
Tum degerler sorunsuzca atandi ve her sey yolunda 🙂
Referencing Beans
Spring Expression Language ile yapabilecegimiz bir baska durum bir bean’e baska bir bean’in idsi ile referansta bulunmaktir. Bu islemi daha onceki derslerde de yapmistik burada SpEL dilini kullanarak da yapabildigimizi gorecegiz.
JavaWorld.java
package erguder.levent_07.spel.referencebean; public class JavaWorld { private Framework framework; private int releaseYear; private String version; // getter setter public String write() { return framework.getName() + " Created by:"+framework.getCreator() ; } }
Framework.java
package erguder.levent_07.spel.referencebean; public class Framework { private String name; private String creator; private int year; //getter setter public String frameWorkVersion() { return "3.2.2.release"; } }
Framework sinifimiz da 3 tane degisken icermektedir. Simdi de xml dosyamizi inceleyelim…
- frameworkId bean’inde #{} yapisi kullanilarak deger atamasi yapilmistir.
- javaWorldId bean’inde , JavaWorld sinifimizda bulunan framework degiskenimize deger atamasi yapiyoruz.
- Yine Java World sinifimizda bulunan releaseYear degiskenine , Framework sinifinda bulunan year degiskeninin degerini atiyoruz. Iste SpEL in guzel bir ozelligi 🙂 (1. madde)
- JavaWorld sinifimizda bulunan version degiskenine , Framework sinifinda bulunan frameWorkVersion metodunu cagirararak deger atamasi yapiyoruz. Bu metodun donus degeri String dir. SpEL in bir baska guzel ozelligi daha ! Burada donen degere .toUpperCase() gibi bir String metodu uygulayabiliriz. Buradaki soru isareti gelen deger null ise toUpperCase() metodunu calistirma anlamina gelmektedir. Eger null bir String degisken toUppserCase() metodunu cagirirsa NullPointerException hatasi aliriz. Kisaca soru isareti bir nevi hata kontrolu olmaktadir. (2.madde)
<bean id="frameWorkId" class="erguder.levent_07.spel.referencebean.Framework"> <property name="name" value="#{'Spring'}" /> <property name="creator" value="#{'Rod Johnson'}" /> <property name="year" value="#{2003}" /> </bean> <bean id="javaWorldId" class="erguder.levent_07.spel.referencebean.JavaWorld"> <property name="framework" value="#{frameWorkId}" /> <property name="releaseYear" value="#{frameWorkId.year}" /> <property name="version" value="#{frameWorkId.frameWorkVersion()?.toUpperCase()}" /> </bean>
SpeELReferenceTest.java
JavaWorld jw = (JavaWorld) context.getBean("javaWorldId"); System.out.println(jw.write() +"," +jw.getReleaseYear() + ",Latest Version: "+ jw.getVersion());
Test sinifimizi calistirdigimizda su sonucu elde ederiz…
Spring Created by:Rod Johnson,2003,Latest Version: 3.2.2.RELEASE
Bu ornek ile Spring Language Expression konusunun ilk bolumunun sonuna geldik.
Kaynak Kodlar: SpringProject_v7
Herkese Bol Javali Gunler dilerim.
Be an oracle man , import java.*;
Levent Erguder
injavawetrust
Leave a Reply