Visualizzazione post con etichetta spring. Mostra tutti i post
Visualizzazione post con etichetta spring. Mostra tutti i post

mercoledì 5 gennaio 2011

Concaterare liste con Spring

E' possibile concatenare liste di oggetti in Spring.
Con Spring 2.5 esistono due possibilità:

1) utilizzando la gerarchia di bean





Foo






Bar






Ernie
Bert





In questo modo listTree conterrà [Foo, Bar, Ernie, Bert].
Se non si vuole introdurre una gerarchia di bean, bisogna seguire un'altra strada.

2) creando una classe apposita che esegue la concatenazione


package com.company.utils.spring;
import java.util.*;
import org.springframework.beans.factory.config.ListFactoryBean;

public class ListMergerFactory extends ListFactoryBean
{
private final List listOfLists;

public ListMergerFactory(List listOfLists) throws Exception
{
this.listOfLists = listOfLists;
setSourceList(new ArrayList());
}

protected Object createInstance()
{
List listOrigin = (List) super.createInstance();
for (Iterator iter = listOfLists.iterator(); iter.hasNext();)
{
List element = (List) iter.next();
listOrigin.addAll(element);
}
return listOrigin;
}
}


E utilizzandola per creare la lista finale:






Foo






Bar















Ernie
Bert





Anche in questo modo listTree conterrà [Foo, Bar, Ernie, Bert].

martedì 29 settembre 2009

Istanziare classi annidate con Spring

Tra le varie possibilità offerte da Spring di istanziare un oggetto non poteva mancare l'istanziazione delle classi annidate.
Ipotizziamo di avere una classe IndexArgsFactory definita all'interno di IndexArgs:
public final class IndexArgs
{

    public static final class IndexArgsFactory
    {

        public IndexArgsFactory(FormulaManager formulaManager)
        {
          // [...]
        }
    }
    // [...]
}
Nel file di configurazione di Spring dovremo usare la notazione:
<bean id="indexArgsFactory" class="it.sinossi.example.IndexArgs$IndexArgsFactory">
  <constructor-arg ref="formulaManager" />
</bean>
Dove il carattere "$" fa da separatore tra la classe contenitore e la classe annidata.

Vedi anche:
Nested Classes
Inner classes