English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Der Spring-Framework bietet die Bequemlichkeit, Beans mit dem Fabrikmethod zu injizieren. Dafür können wir die beiden Attribute des bean-Elements verwenden.
factory-method: ) der Fabrikmethod ist, der aufgerufen wird, um das Bean zu injizieren. factory-bean: ) die Referenz des Beans, das den Fabrikmethod aufruft, darstellt. Wenn der Fabrikmethod nicht statisch ist, wird er verwendet.
Ein Verfahren, das die Instanz der Klasse zurückgibt, wird als factory-method).
public class A { public static A getA() {//Fabrikmethod return new A(); } }
kann drei Arten von factory-method:
1) zurückgegebenen statische Fabrikmethod eigene) eine Instanz der Klasse. Wird für das Singleton-Designmuster verwendet.
<bean id="a" class="com.w3codebox.A" Fabrik-method="getA"></bean>
2) eine statische Fabrikmethodwird zurückgegeben ein weiteresEin Beispiel für eine Instanz der Klasse. Die verwendete Instanz ist unbekannt und wird zur Laufzeit entschieden.
<bean id="b" class="com.w3codebox.A" Fabrik-method="getB"></bean>
3) eine nicht-statische FabrikMethode, die ein weiteresEin Beispiel für eine Instanz der Klasse. Die verwendete Instanz ist unbekannt und wird zur Laufzeit entschieden.
<bean id="a" class="com.w3codebox.A"></bean> <bean id="b" class="com.w3codebox.A" Fabrik-method="getB" factory-bean="a"></bean>
Lassen Sie uns ein einfaches Beispiel sehen, um Abhängigkeiten mit dem statischen Fabrikmethod Injection zu verwenden.
<bean id="a" class="com.w3codebox.A" Fabrik-method="getA"></bean>
Lassen Sie uns einen vollständigen Beispiel sehen, um Abhängigkeiten mit dem Fabrikmethod Injection in Spring zu verwenden. Um dieses Beispiel zu erstellen, haben wir3个文件。
A.java applicationContext.xml Test.java
A.java
Diese Klasse ist ein Singleton.
package com.w3codebox; public class A { private static final A obj = new A(); private A() {System.out.println("privater Konstruktor");} public static A getA() { System.out.println("Fabrikmethod "); 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/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd"> <bean id="a" class="com.w3codebox.A" Fabrik-method="getA"></bean> </beans>
Test.java
Diese Klasse holt das Bean aus der Datei applicationContext.xml und ruft die msg-Methode auf.
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(); } }
Ausgabe:
privater Konstruktor Fabrikmethod hello user
让我们看一下通过静态工厂方法注入依赖关系的简单代码,该方法返回另一个类的实例。
为了创建在此示例中,我们创建了6个文件。
Printable.java A.java B.java PrintableFactory.java applicationContext.xml Test.java
Printable.java
package com.w3codebox; public interface Printable { void print(); }
A.java
package com.w3codebox; public class A implements Printable{ @Override public void print() { System.out.println("hello a"); } }
B.java
package com.w3codebox; public class B implements Printable{ @Override public void print() { System.out.println("hello b"); } }
PrintableFactory.java
package com.w3codebox; public class PrintableFactory { public static Printable getPrintable(){ //return new B(); return new A();//返回任意一个实例,A或B } }
applicationContext.xml
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd"> <bean id="p" class="com.w3codebox.PrintableFactory" factory-method="getPrintable"></bean> </beans>
Test.java
此类从applicationContext.xml文件获取Bean并调用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(); } }
Ausgabe:
hello a
让我们看一下通过非静态工厂方法注入依赖关系的示例,该方法返回另一个类的实例。
为了创建这个示例,我们已经创建了6个文件。
Printable.java A.java B.java PrintableFactory.java applicationContext.xml Test.java
所有文件都与以前的文件相同,您只需更改两个文件: PrintableFactory和applicationContext.xml。
PrintableFactory.java
package com.w3codebox; public class PrintableFactory { //Nicht statische Fabrikmethode public Printable getPrintable(){ return new A();//Rückgabe jeder Instanz, A oder B } }
applicationContext.xml
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/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>
Ausgabe:
hello a