Le conteneur Spring propose trois approches pour créer des instances de beans :1) Instanciation par constructeur
public class Produit {
private String libelle;
//getters et setters omis
}
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd">
<!-- Instanciation par constructeur -->
<bean id="produit1" class="com.example.demo.Produit"></bean>
</beans>
Test :
@Test
public void testContext() {
//Initialisation du conteneur Spring
ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");
//Récupération du bean produit1
Produit produit1 = ctx.getBean("produit1", Produit.class);
System.out.println(produit1);
}
2) Instanciation par méthode staitque d'usine
public class ProduitFactory {
//Méthode statique d'usine - retourne une instance de Produit
public static Produit creerProduitStatique(){
return new Produit();
}
}
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd">
<!-- Instanciation par constructeur -->
<bean id="produit1" class="com.example.demo.Produit"></bean>
<!-- Instanciation par factory statique -->
<bean id="produit2" class="com.example.demo.ProduitFactory"
factory-method="creerProduitStatique"></bean>
</beans>
Test :
@Test
public void testContext() {
//Initialisation du conteneur Spring
ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");
//Récupération du produit1
Produit produit1 = ctx.getBean("produit1", Produit.class);
System.out.println(produit1);
//Récupération du produit2
Produit produit2 = ctx.getBean("produit2", Produit.class);
System.out.println(produit2);
}
3) Instanciation par méthode d'usine d'instance
Ajout de la méthode d'usine d'instance dans la classe factory :
public class Produit {
private String libelle;
//getters et setters omis
}
public class ProduitFactory {
//Méthode statique d'usine - retourne une instance de Produit
public static Produit creerProduitStatique(){
return new Produit();
}
//Méthode d'usine d'instance - retourne une instance de Produit
public Produit creerProduitInstance(){
return new Produit();
}
}
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd">
<!-- Instanciation par constructeur -->
<bean id="produit1" class="com.example.demo.Produit"></bean>
<!-- Instanciation par factory statique -->
<bean id="produit2" class="com.example.demo.ProduitFactory"
factory-method="creerProduitStatique"></bean>
<!-- Instanciation préalable de la classe factory -->
<bean id="produitFactory" class="com.example.demo.ProduitFactory"></bean>
<!-- Instanciation par factory d'instance -->
<bean id="produit3" factory-bean="produitFactory"
factory-method="creerProduitInstance"></bean>
</beans>
Test :
@Test
public void testContext() {
//Initialisation du conteneur Spring
ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");
//Récupération du produit1
Produit produit1 = ctx.getBean("produit1", Produit.class);
System.out.println(produit1);
//Récupération du produit2
Produit produit2 = ctx.getBean("produit2", Produit.class);
System.out.println(produit2);
//Récupération du produit3
Produit produit3 = ctx.getBean("produit3", Produit.class);
System.out.println(produit3);
}