Spring Ders12 - Referencing Beans


   Bir bean diğer beane referans olarak verilebileceğini daha önceki derslerde göstermiştik. Bu derste referanslama işleminin tüm farklı şekillerini göstereceğiz.

Bir beani diğer beane
  • Inner bean referanslama yaklaşımıyla,
  • Genel bean referanslama yaklaşımıyla,
  • Local bean referanslama yaklaşımıyla,
  • Bean identifier (tanımlayıcı) referanslama yaklaşımıyla local ve genel olarak yapılabilir.
Inner Bean Referanslama Yaklaşımı

Bir beane isimsiz bir bean setter metodu veya constructor metodu yardımıyla referans olarak verilebilir.


<bean id="..." class="...">
    <property name="...">
            <bean  class="..."></bean>
    </property>
</bean>

<bean id="..." class="...">
    <constructor-arg>
            <bean  class="..."></bean>
    </constructor-arg>
</bean>


Genel Bean Referanslama Yaklaşımı

Bir beane diğer bir bean setter metodu veya constructor metodu yardımıyla referans olarak verilebilir.


<bean id="a" class="test.A"></bean>

<bean id="b1" class="test.B">
   <property name="a" ref="a"/>
</bean>

<bean id="b2" class="test.B">
   <constructor-arg ref="a"/>
</bean>


Local Bean Referanslama Yaklaşımı

Eğer bir bean referans olarak alacağı bean ile aynı .xml config dosyasında ise, o zaman local bean referanslama yaklaşımı kullanılabilir, zorunlu değildir. Referanslama işlemi her zamanki gibi setter metodu veya constructor metodu yardımıyla yapılabilir.


<bean id="a" class="test.A"></bean>

<bean id="b1" class="test.B">
   <property name="a">
        < ref local="a"/>
    </property>
</bean>

<bean id="b2" class="test.B">
   <constructor-arg>
         <ref local="a"/>
   </constructor-arg>
</bean>


Bean Identifier Referanslama Yaklaşımı ( Local )

Bir beane diğer bir bean ismiyle setter metodu veya constructor metodu yardımıyla idref olarak verilebilir. Klasik bean referanslama şeklinden farkı sadece beanin string olarak değerini almasıdır. Yani beanin String olarak karşılığı neyse sadece o aktarılır. Local olarak belirtilmesi ise aynı .xml config dosyalarında bulunduğundan bu özelliğin kullanabilir olmasıdır. Aynı dosyada oldukları için local kullanma zorunluluğu yoktur, genel yaklaşım da kullanılabilir.

(Spring 4 versiyonuyla birlikte bu yaklaşım kaldırıldı.)


<bean id="a" class="test.A"></bean>

<bean id="b1" class="test.B">
   <property name="a">
        <idref local="a"/>
    </property>
</bean>

<bean id="b2" class="test.B">
   <constructor-arg>
         <idref local="a"/>
   </constructor-arg>
</bean>


Bean Identifier Referanslama Yaklaşımı ( Genel )

Bir beane diğer bir bean ismiyle setter metodu veya constructor metodu yardımıyla idref olarak verilebilir. Klasik bean referanslama şeklinden farkı sadece beanin string olarak değerini almasıdır. Yani beanin String olarak karşılığı neyse sadece o aktarılır.


<bean id="a" class="test.A"></bean>

<bean id="b1" class="test.B">
   <property name="a">
        <idref bean="a"/>
    </property>
</bean>

<bean id="b2" class="test.B">
   <constructor-arg>
         <idref bean="a"/>
   </constructor-arg>
</bean>


Diğer yaklaşımların örnekleri daha önce yapıldığından, idref local özelliğinin de spring 4 versiyonuyla birlikte kaldırıldığından dolayı bean identifier referanslama yaklaşımı ile ilgili bir örnek program yapalım.

Main.java
package test;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class Main {

 public static void main(String[] args) {

  ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");

  B b=(B)context.getBean("b");
  
  System.out.println("b beani üzerinden A sınıfından oluşturulan beanin ismi : "+ b.getA());
  //referanslama işleminde sadece beanin String değeri olarak ismi aktarıldı.
  
 }

}

A.java
package test;

public class A {

 public A() {
  System.out.println("A nesnesi oluşturuldu.");
 }

}

B.java
package test;

public class B {

 private String a;

 public B() {
  System.out.println("B nesnesi oluşturuldu.");
 }

 public String getA() {
  return a;
 }

 public void setA(String a) {
  this.a = a;
 }

}

applicationContext.java
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">




 <bean id="beanA" class="test.A"></bean>

 <bean id="b" class="test.B">
  <property name="a">
   <idref bean="beanA" />
  </property>
 </bean>

</beans>


spring referencing beans

Yorumlar

Bu blogdaki popüler yayınlar

JSP Ders04 - JSP Direktifleri

SQL Ders27 - INSERT INTO

Java Mini Proje 005 - Dik Üçgenin Hipotenüsünü Bulma