back to top

Core container – Spring beans – Guida Java Spring

In questa sezione andremo ad analizzare la configurazione dell'IoC container attraverso i metadati xml. Per instazionare un bean nell'IoC contanier ci bastano solo due infomarzioni:

  • Qualified Name della classe a cui appartiene l'oggetto
  • Un id unico nel contesto da assegnare al bean

Esempio:

<beans id="myBean" class="com.MyClass"/>

<beans class="com.MyClass1"/>

Nel secondo esempio si è omesso l'attributo id volutamente, poichè se non viene specificato Spring ne genera uno random. Si consiglia però di specificare sempre un id, in modo da poter referenziare il bean all'occorrenza. Un bean può avere anche più identificativi che possono essere aggiunti attraverso l'attributo name o attraverso il tag alias:

<beans id="myBean" class="com.MyClass" name="alias1 alias2" />

oppure

<alias name="myBean" alias="alias1" />

Per instanziare i beans Spring usa tre metodi:

  • Attraverso il costruttore
  • Attraverso un factory method
  • Attraverso un factory bean

Se non si specifica un metodo per instanziare i beans, Spring di default usa il costruttore, quindi ogni bean deve avere il construttore di default (più avanti vedremo come instanziare un bean usando un costruttore con dei parametri). Se invece si vuole usare un factory method, tipico delle singleton, bisogna usare l'attributo factory-method.

public class FactoryMethodBean {

  private static FactoryMethodBean instance = new FactoryMethodBean();

  private FactoryMethodBean() {}

  public static FactoryMethodBean getInstance() {
    return instance;
  }

}

e nell'applicationContext.xml

<bean id="factoryMethodExample" class="it.mrwebmaster.singleton.FactoryMethodBean" factory-method="getInstance"/>

L'ultimo metodo di instanziazione usa, oltre al factory method, anche un factory bean, tipico dei Service Locator.

public class FactoryBean {

  private ExampleBean ex;

  public FactoryBean() {
    super();
    ex = new ExampleBeanImpl();
  }

  public ExampleBean getExampleBean() {
    return ex;
  }

}

e nell'applicationContext.xml

<bean id="factoryBean" class="it.mrwebmaster.factory.FactoryBean" />

<bean id="exampleBean" class="it.mrwebmaster.factory.ExampleBean" factory-bean="factoryBean" factory-method="getExampleBean"/>

Gli scope

Una importante proprietà dei un bean è il suo scope, che ne definisce il ciclo di vita. Spring supporta cinque tipi di scope:

  • singleton, viene creata un solo instanza del bean nel container che viene condivisa da tutti gli altri beans.
  • prototype, ogni volta che viene richiesto un determinato bean ne viene instanziato uno nuovo, cioè ogni altro bean che fa riferimento ad un bean con scope prototype avrà la sua instanza.
  • request, per ogni http request viene creata un'instanza di questo bean
  • session, per ogni http session viene creata un'instanza di questo bean
  • global session, deve essere usato solo in applicazioni che fanno uso di Portlet, dove è presente in concetto di global session tra le varie Portlet.

Gli scopes singleton e prototype sono disponibili per tutti gli ApplicationContext, mentre request, session e global session sono validi solo per i WebApplicationContext.

Se l'attributo scope non viene specificato il bean assume scope singleton di default.

Oltre a questi scopes ne esiste un sesto, lo scope thread che però non è abilitato di default. In Spring è possibile creare dei custom scopes, ma viene lasciato al lettore l'approfondimento di questo argomento.

PubblicitÃ