Merhaba arkadaşlar, bu yazımda beanlarda Aliasing ve Scopes kavramından bahsedeceğim.
Aliasing Nedir?
Alias kelime olarak takma isim anlamına gelmektedir. Zaten springde de takma ad olarak kullanılmaktadır. Örneğin person adında beanimiz olsun. Biz bu beani person2 ismi ilerek kullanmak istiyorsak Alias kullanmalıyız. Şimdi bir örnek üzerinden inceleyelim:
Person.java
1 2 3 4 5 6 7 8 9 10 11 |
public class Person { private String name; private int age; private Address address; public void print() { System.out.println("Name=>"+getName()+" age=>"+getAge()+" Adress Street=>"+getAddress().getStreet()+" No=>"+getAddress().getNo()); } //Getters and Setters |
Address.java
1 2 3 4 5 6 7 8 9 10 |
public class Address { private String street; private int no; public Address() { System.out.println("Adres Yapıcısı Çalıştı"); } //Getters and Setters |
Application.xml
1 2 3 4 5 6 7 8 9 10 |
<bean id="person1" class="_009_bean_aliasing_xml.Person" scope="prototype"> <property name="name" value="Furkan"/> <property name="age" value="23"/> <property name="address" ref="address"/> </bean> <bean id="address" class="_009_bean_aliasing_xml.Address"> <property name="no" value="18"/> <property name="street" value="Test"/> </bean> <alias name="person1" alias="personAlias"/> |
Test.java
1 2 3 4 5 6 7 8 9 10 11 |
public class Test { public static void main(String[] args) { ApplicationContext applicationContext=new ClassPathXmlApplicationContext("_009_application.xml"); Person person=applicationContext.getBean("personAlias",Person.class); person.print(); ((ClassPathXmlApplicationContext)applicationContext).close(); } } |
Application.xml dosyamızda <alias> kullanılarak “personAlias” isimli bean oluşturuldu ve main metodumuzda bean olarak person nesnesi oluşturuldu.
Scope Nedir? Tipleri Nelerdir?
Her beanin bir yaşam döngüsü vardır. Bu yaşam döngüsünde beanlerimizin scope’unu belirleyebiliriz. Yani beanin yaşam süresini belirlememizi sağlar. Beanlerimizin scopeleri Spring IoC tarafından yönetilir. Scopes tipleri 5 tanedir. Bunlar:
- Singleton => Beanden sadece 1 adet üretilir. Varsayılan olan bu tiptir.
- Prototype => Beane istek geldiğinde oluşturulur. Her istekte farklı oluşturulur.
- Request => Web uygulamaları için kullanılır. Her http istekte instance oluşturulur.
- Session => Web uygulamaları için kullanılır. Her http session oluştuğunda instance oluşturulur.
- globalSession => Web uygulamaları için kullanılır. Her http isteği geldiğinde 1 adet instance oluşturulur.
Şimdi bir örnek ile kullanımına bakalım:
Person.java
1 2 3 4 5 6 7 8 9 10 11 |
public class Person { private String name; private int age; private Address address; public void print() { System.out.println("Name=>"+getName()+" age=>"+getAge()+" Adress Street=>"+getAddress().getStreet()+" No=>"+getAddress().getNo()); } //Getters and Setters |
Address.java
1 2 3 4 5 6 7 8 9 10 |
public class Address { private String street; private int no; public Address() { System.out.println("Adres Yapıcısı Çalıştı"); } //Getters and Setters |
Application.xml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
<bean id="person1" class="_008_bean_scopes_xml.Person" scope="prototype"> <property name="name" value="Furkan"/> <property name="age" value="23"/> <property name="address" ref="address"/> </bean> <bean id="person2" class="_008_bean_scopes_xml.Person" scope="singleton"> <property name="name" value="Furkan"/> <property name="age" value="23"/> <property name="address" ref="address"/> </bean> <bean id="address" class="_008_bean_scopes_xml.Address"> <property name="no" value="18"/> <property name="street" value="Test"/> </bean> |
Test.java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
public class Test { public static void main(String[] args) { ApplicationContext applicationContext=new ClassPathXmlApplicationContext("_008_application.xml"); Person person1=applicationContext.getBean("person1",Person.class); Person person11=applicationContext.getBean("person1",Person.class); Person person2=applicationContext.getBean("person2",Person.class); Person person22=applicationContext.getBean("person2",Person.class); System.out.println("Prototype =>"+(person1==person11)); System.out.println("Singleton =>"+(person2==person22)); ((ClassPathXmlApplicationContext)applicationContext).close(); } } |
Çıktı:
Bu yazımı burada bitiriyorum. Diğer yazılarımda görüşmek üzere…