Spring : Trois méthodes courantes d'instanciation des beans Spring-IOC

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);
    }

Étiquettes: spring-framework IOC Bean inversion-controle Java

Publié le 15 juillet à 08h21