English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

注入Dependency Spring

Injection de dépendance avec méthode factory dans Spring

Le cadre Spring fournit la commodité d'injecter le bean avec la méthode factory. À cette fin, nous pouvons utiliser les deux attributs de l'élément bean.

factory-method: représente la méthode factory appelée pour injecter le bean. factory-bean: représente la référence du bean appelant la méthode factory. Si la méthode factory est non statique, utilisez-la.

une méthode qui retourne l'instance de la classe s'appelle factory-method.

public class A {
public static A getA() {//méthode factory
    return new A();
}
}

factory-type method

peut y avoir trois types de factory-method:

1) retourné méthode factory statique propre) l'instance de la classe. Utilisé pour le design pattern singleton.

<bean id="a" class="com.w3codebox.A" factory-method="getA"></bean>

2) un méthode factory statiquequi retourne une autrel'instance de la classe. L'instance utilisée est inconnue et déterminée au moment de l'exécution.

<bean id="b" class="com.w3codebox.A" factory-method="getB"></bean>

3) un usine non statiqueméthode, qui retourne une autrel'instance de la classe. L'instance utilisée est inconnue et déterminée au moment de l'exécution.

<bean id="a" class="com.w3codebox.A"></bean>
<bean id="b" class="com.w3codebox.A" factory-method="getB" factory-bean="a"></bean>

type1

Voyons un exemple simple d'injection de dépendances avec une méthode factory statique.

<bean id="a" class="com.w3codebox.A" factory-method="getA"></bean>

Voyons un exemple complet pour utiliser la méthode factory dans Spring pour injecter des dépendances. Pour créer cet exemple, nous avons créé3个文件。

A.java applicationContext.xml Test.java

A.java

Ce type est une classe singleton.

paquet com.w3codebox;
public class A {
private static final A obj = new A();
private A() {System.out.println("constructeur privé");}
public static A getA() {
    System.out.println("méthode factory ");
    return obj;
}
public void msg() {
    System.out.println("hello user");
}
}

applicationContext.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans
    xmlns="http://www.springframework.org/schéma/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:p="http://www.springframework.org/schéma/p"
    xsi:schemaLocation="http://www.springframework.org/schéma/beans 
http://www.springframework.org/schéma/beans/spring-beans-3.0.xsd">
<bean id="a" class="com.w3codebox.A" factory-method="getA"></bean>
</beans>

Test.java

Ce type obtient le Bean à partir du fichier applicationContext.xml et appelle la méthode msg.

package org.sssit;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class Test {
public static void main(String[] args) {
    ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
    A a = (A) context.getBean("a");
    a.msg();
}
}

Sortie:

constructeur privé
méthode factory
hello user

type2

Voyons un code simple d'injection de dépendances par l'intermédiaire d'une méthode de fabrication statique, qui renvoie une instance d'une autre classe.

Pour créer dans cet exemple, nous avons créé6个文件。

Printable.java A.java B.java PrintableFactory.java applicationContext.xml Test.java

Printable.java

paquet com.w3codebox;
public interface Printable {
void print();
}

A.java

paquet com.w3codebox;
public class A implements Printable{
    @Override
    public void print() {
        System.out.println("hello a");
    }
}

B.java

paquet com.w3codebox;
public class B implements Printable{
    @Override
    public void print() {
        System.out.println("hello b");
    }
}

PrintableFactory.java

paquet com.w3codebox;
public class PrintableFactory {
    public static Printable getPrintable(){
        //return new B();
              return new A();//retourne une instance quelconque, A ou B
    }
}

applicationContext.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans
    xmlns="http://www.springframework.org/schéma/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:p="http://www.springframework.org/schéma/p"
    xsi:schemaLocation="http://www.springframework.org/schéma/beans 
http://www.springframework.org/schéma/beans/spring-beans-3.0.xsd">
<bean id="p" class="com.w3codebox.PrintableFactory" factory-method="getPrintable"></bean>
</beans>

Test.java

Ce classe obtient un Bean à partir du fichier applicationContext.xml et appelle la méthode print().

package org.sssit;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class Test {
public static void main(String[] args) {
    ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
    Printable p = (Printable) context.getBean("p");
    p.print();
}
}

Sortie:

hello a

type3

Voyons un exemple d'injection de dépendances par l'intermédiaire d'une méthode de fabrication non statique, qui renvoie une instance d'une autre classe.

Pour créer cet exemple, nous avons créé6个文件。

Printable.java A.java B.java PrintableFactory.java applicationContext.xml Test.java

所有文件都与以前的文件相同,您只需更改两个文件: PrintableFactory和applicationContext.xml。

PrintableFactory.java

paquet com.w3codebox;
public class PrintableFactory {
    //méthode d'usine non statique
    public Printable getPrintable(){
        return new A();//retourner n'importe quelle instance, A ou B
    }
}

applicationContext.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans
    xmlns="http://www.springframework.org/schéma/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:p="http://www.springframework.org/schéma/p"
    xsi:schemaLocation="http://www.springframework.org/schéma/beans 
http://www.springframework.org/schéma/beans/spring-beans-3.0.xsd">
<bean id="pfactory" class="com.w3codebox.PrintableFactory"></bean>
<bean id="p" class="com.w3codebox.PrintableFactory" factory-method="getPrintable" 
factory-bean="pfactory"></bean>
</beans>

Sortie:

hello a