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…

  1. frameworkId bean’inde #{} yapisi kullanilarak deger atamasi yapilmistir.
  2. javaWorldId bean’inde , JavaWorld sinifimizda bulunan framework degiskenimize deger atamasi yapiyoruz.
  3. Yine Java World sinifimizda bulunan releaseYear degiskenine , Framework sinifinda bulunan year degiskeninin degerini atiyoruz. Iste SpEL in guzel bir ozelligi 🙂 (1. madde)
  4. 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

Print Friendly, PDF & Email

Leave a Reply

Your email address will not be published. Required fields are marked *