Déclaration des listes et des maps en java: Simplifiez vous la vie avec Spring

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.

spring-mini-logo.png

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!

3 commentaires

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Captcha *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.