English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
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(); } }
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>
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
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
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