18 Nisan 2019 Perşembe

XML ile Bean Tanımlama - constructor-arg

Giriş
Bean'e kurucu parametre vermek için constructor-arg tag'i kullanılır. Şu tip nesneler geçilebilir.
List  <list/>
Set  <set/>
Map  <map/>
Properties  <props/>
Örnek - value
Şöyle yaparız.
<bean id="X" class="A.X">
  <constructor-arg value="Foo"/>
</bean>
Örnek - list
Elimizde şöyle bir sınıf olsun
public class PCCollection implements MarketPC {

  private Collection<PersonalComputer> pcCollection;

  public PCCollection(Collection<PersonalComputer> pcCollection) {
    this.pcCollection = pcCollection;
  }
}
Şöyle yaparız.
<bean id="marketPC" class="PCCollection">
  <constructor-arg name="pcCollection">
    <list>
      <ref bean="customPC"/>
      <bean class="MyCustomPC" scope="prototype">
        <constructor-arg name="mother" ref="msiMother"/>
        <constructor-arg name="processor" ref="asusProcessor"/>
        <constructor-arg name="storage" ref="gigabyteStorage"/>
        <constructor-arg name="ram" ref="gigabyteRam"/>
        <constructor-arg name="video" ref="asusVideo"/>
      </bean>
    </list>
  </constructor-arg>
</bean>
Örnek - map
Elimizde şöyle bir kod olsun.
public class MyClass {
  public MyClass(Map<String, String> componentName)
}
Şöyle yaparız.
<bean id="MyBean" class="org.MyClass">
  <constructor-arg name="componentName">
    <util:map>
      <entry key="T1" value-ref="A"/>
      <entry key="T2" value-ref="B"/>
      <entry key="T3" value-ref="C"/>
    </util:map>
</bean>
Örnek - value + SpEL
Elimizde şöyle bir sınıf olsun
public class PCCollection implements MarketPC {

  private Collection<PersonalComputer> pcCollection;

  public PCCollection(Collection<PersonalComputer> pcCollection) {
    this.pcCollection = pcCollection;
  }
}
PersonalComputer'dan kalıtan şöyle bir sınıf olsun
public class MyCustomPC implements PersonalComputer {

  private MotherBoard mother;
  private Processor processor;
  private Ram ram;
  private StorageDevice storage;
  private VideoCard video;
}
Başka bir bean'e ait pcCollection alanından belli değere sahip onları atamak için şöyle yaparız.
<bean id="marketPCASUS" class="PCCollection">
    <constructor-arg name="pcCollection"
    value = "#{marketPC.pcCollection.?[video eq 'asusVideo']}">
    </constructor-arg>
</bean>
Örnek - ref
Elimizde hem value hem de bir başka bean alan bir sınıf olsun.
public Location(Address address, String pincode) {
...
}
Hem value olarak string hem de referans olarak bir başka bean'i geçmek için şöyle yaparız.
<bean id="location" class="com.ibm.spring.Location">
  <constructor-arg name="pincode" value="110976"></constructor-arg>
  <constructor-arg ref="address"></constructor-arg>
</bean>

Hiç yorum yok:

Yorum Gönder