L'objectif de ce billet est double:
1) Illustrer l'utilisation du namespace util: dans spring pour déclarer des listes / maps.
2) L'utilisation de @Resource (et non @Autowired) pour injecter ces listes / maps.
Encore une fois, l'adage Spring makes simple things simple, and complicated things possible se confirme.
Passons à la pratique.
La démo, projet maven, est réalisée en qutre actes:
ACTE 1. Déclarer namespace
Déclarer dans l'entête du fichier spring le namesapce util comm ceci:
xmlns:util="http://www.springframework.org/schema/util"
et
http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util.xsd
ACTE 2. Déclarer une liste ou une map
Le fichier spring listmap-context.xml localisé dans META-INF/spring/, contient ces lignes:
<!-- List <String>--> <util:list id="emails" value-type="java.lang.String"> value-type="java.lang.String"> <value>toto.to@to.fr</value> <value>titi.ti@to.fr</value> </util:list> <!-- TreeMap <String,String>--> <util:map id="mapEmails" map-class="java.util.TreeMap" key-type="java.lang.String" value-type="java.lang.String"> <entry key="toto" value="toto@to.fr" /> <entry key="titi" value="titi@ti.fr" /> <entry key="trotro" value="tro@tro.fr" /> <entry key="topo" value="topo@topo.fr" /> </util:map>
ACTE 3. Tester
package fr.netapsys.propsreader.tests; import java.util.*; import javax.annotation.Resource; import org.junit.*; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Value; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration({"classpath:META-INF/spring/listmap-context.xml"}) public class TestListFromCtx { @Resource (name="emails") List<String> emails; @Resource(name="mapEmails") Map<String,String> mapEmails; @Test public void lireListeFromCtx(){ for(String mail:emails){ Assert.assertNotNull(mail); } } //*********lire TreeMap *******/ @Test public void lireMap(){ String[] expectedCles={"a","c","d","r"}; String[]expectedValues={"a.a@gmail.com","ba.ba@gmail.com", "d.d@gmail.com","r.r@gmail.com"}; Assert.assertArrayEquals(expectedCles,mapEmails.keySet().toArray()); Assert.assertArrayEquals(expectedValues,mapEmails.values().toArray()); } }
Un seul point de vigilance: L'injection de ces listes et maps ne peuvent pas se faire avec @Autowired.
Il faudrait donc employer @Resource.
Sinon, vous pouvez utiliser l'une des méthodes getBean pour récupérer une référence sur ces listes/maps.
Lancer sur la console la commande:
mvn test
Tout doit être au vert.
Pour être complet, voici les dépendances du projet maven.
ACTE 4. Configurer le pom
Enfin, voici les dépendances du pom:
..... <properties> <spring-version>3.1.2.RELEASE</spring-version> <junit-version>4.10</junit-version> </properties> <dependencies> <!-- spring-core --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-core</artifactId> <version>${spring-version}</version> </dependency> <!-- spring-expression --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-expression</artifactId> <version>${spring-version}</version> </dependency> <!-- spring-asm needed --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-asm</artifactId> <version>${spring-version}</version> </dependency> <!-- spring-beans --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-beans</artifactId> <version>${spring-version}</version> </dependency> <!-- spring-context --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>${spring-version}</version> </dependency> <!-- logging --> <dependency> <groupId>commons-logging</groupId> <artifactId>commons-logging</artifactId> <version>1.1</version> <scope>runtime</scope> </dependency> <!-- spring-test --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-test</artifactId> <version>${spring-version}</version> <scope>test</scope> </dependency> <!-- junit --> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>${junit-version}</version> <scope>test</scope> </dependency> </dependencies>
Voilà c'est simple!
payday loan lenders
payday loans without a checking account…
http://www.darcyarms.com.au
Recently, I did not give lots of consideration to leaving comments on site page articles and have left comments even much less. Reading by means of your pleasant article, will aid me to do so sometimes….
teeth whitening kits
at home teeth bleaching kits…