webentwicklung-frage-antwort-db.com.de

Was ist der Unterschied zwischen der Frühlingsfabrikmethode und der Fabrikbohne?

Ich bin New Springs. In Bean-Tag habe ich Factory-Methode und Factory-Bean-Attribute gefunden. Was ist der Unterschied zwischen Factory-Methode und Factory-Bean?

Ich benutze die Factory-Methode, um meine statische Methode getInstance zum Erstellen eines Singleton-Objekts aufzurufen.

Wofür wird Factory-Bean verwendet?


Für gegebene Antworten, was ich verstand, war

Mit der Factory-Methode wird eine statische Methode aufgerufen, um ein Objekt in derselben Bean-Klasse zu erstellen.

Factory-Bean wird zum Erstellen eines Objekts verwendet, das auf dem Factory-Design-Muster basiert.

Bsp .: - Ich frage ein EggPlant-Objekt aus der VegetableFactory-Klasse (die das angeforderte Gemüseobjekt zurückgibt), indem ich meinen Gemüsenamen (in diesem Fall EggPlant) übergebe.

Bitte korrigieren wenn ich falsch liege

23
Sarma

Es ist im Grunde der gleiche Unterschied zwischen den Factory-Methode und Factory Design-Mustern, mit einer kleinen Notiz unten. Während eine Methode zum Abrufen von Instanzen einer bestimmten Klasse verwendet wird, ist die andere ein vollwertiges Objekt, das für die Erstellung von Objekten verantwortlich ist, einschließlich der dazu erforderlichen Logik.

In der Dokumentation zur Benutzeroberfläche von FactoryBean heißt es:

Schnittstelle, die von Objekten implementiert wird, die in einer BeanFactory verwendet werden und selbst Fabriken sind. Wenn eine Bean diese Schnittstelle implementiert, wird sie als Factory verwendet, damit ein Objekt verfügbar gemacht werden kann, und nicht direkt als Bean-Instanz, die selbst verfügbar gemacht wird.

Dieses Objekt wird nicht als Bean-Instanz verwendet, sondern als Instanzanbieter über die getObject -Methode.


Aktualisieren

Suche nach Verwendungen von factory-method Über einem FactoryBean wird es anscheinend häufig mit älteren Singleton-Beans verwendet, um die zugrunde liegende Instanz abzurufen. Dieser Ansatz bietet jedoch keine Unterstützung für Initialisierungsmethoden, wie z. B. ein init-Methode, die einen bestimmten Satz von Eigenschaften initialisiert.

In diesem Fall müssen Sie ihn entweder selbst aufrufen, bevor Sie die Klasse verwenden, einen Wrapper definieren, der die Initialisierung übernimmt, oder andere Mechanismen wie MethodInvokingFactoryBean verwenden.


Update 2

Genau genommen soll ein FactoryBean einen bestimmten Typ verwalten. Tatsächlich hätten Sie ein EggPlantFactory, kein VegetableFactory, da die von der Schnittstelle getObject definierte Methode FactoryBean keine Parameter unterstützt.

11
Fritz
factory-method: represents the factory method that will be invoked to inject the bean.
factory-bean: represents the reference of the bean by which factory method will be invoked. It is used if factory method is non-static.

Druckbare.Java

package com.javatpoint;  
public interface Printable {  
    void print();  
}  

A.Java

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

B.Java

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

PrintableFactory.Java

package com.javatpoint;  
public class PrintableFactory {  
    //non-static factory method  
    public Printable getPrintable(){  
        return new A();//return any one instance, either A or 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.javatpoint.PrintableFactory"></bean>  
<bean id="p" class="com.javatpoint.Printable" factory-method="getPrintable"   
factory-bean="pfactory"></bean>  

</beans>  

Beachten Sie, dass public Printable getPrintable() von PrintableFactory.Java Eine nicht statische Methode ist. Im Allgemeinen müssen wir eine Instanz erstellen, wenn wir eine Zugriffs-/Aufrufmethode oder andere Ressourcen einer Klasse benötigen. In ähnlicher Weise haben wir es Bean erstellt. Mit der Referenzvariablen pfactory von Bean rufen wir die Factory-Methode getPrintable auf.

Werksmethode:
Wie jeder bereits erklärt hat, wird Factory-Methode verwendet, um die Feder anzuweisen, die Factory-Methode zum Instanziieren des Objekts zu verwenden.

Hinweis: Die statische Methode ist obligatorisch, ansonsten wird eine Ausnahme ausgelöst.

<bean id="serviceFactory" class="com.test.controller.ServiceFactory" factory-method="getServiceFacrotyWithStaticMethod"/>

Factory-Bean:
Wenn es keine statische Methode gibt und Sie das Objekt dennoch mit einer nicht statischen Methode erstellen möchten, können Sie den folgenden Trick ausführen: factory-bean:

<bean id="instanceWithOutStaticMethod" factory-bean="serviceFactory" factory-method="getInstanceWithOutStaticMethod" />

Hinweis: In der obigen Spring-Definition ist kein Klassenattribut erforderlich.

Klasse:

public class ServiceFactory {

    public static ServiceFactory getServiceFacrotyWithStaticMethod(){
        return new ServiceFactory();
    }

    public SdCard getInstanceWithOutStaticMethod(){
        return new AdaptorSlot("laptop");
    }
}
10
Jagadeesh

Sie finden Dokumentation dazu hier . Siehe Abschnitt 3.2.3.2 und 3.2.3.3.

factory-method wird verwendet, um auf eine statische Methode im Legacy-Code zu verweisen, mit der eine Bean erstellt werden kann.

Ähnlich wie bei der Verwendung einer statischen Factory-Methode zum Erstellen eines Beans wird eine (nicht statische) Factory-Instanzmethode verwendet, bei der eine Factory-Methode eines vorhandenen Beans aus der Factory aufgerufen wird, um das neue Bean zu erstellen.

Das ist was factory-bean ist für.

3
Daniel Kaplan

Ein FactoryBean wird als Factory für andere Beans/Objekte verwendet. Es kann nicht als Bohne selbst verwendet werden.

Das factory-method kann verwendet werden, um die Methode zu definieren, die zum Erstellen dieser Bean verwendet werden soll (anstatt den Konstruktor aufzurufen). Eine Bohne mit einer Factory-Methode kann selbst als Bohne verwendet werden.

Spring kann Bean-Instanzen mit vielen verschiedenen Factory-Typen erstellen. Dies ist nützlich, wenn Sie Bibliotheken/Legacy-Klassen integrieren möchten, die an einen bestimmten Typ gebunden sind.

2
micha

im Frühjahr verwenden wir die Factory-Methode, da in Java vordefinierte Klasse und einige use define-Klasse vorhanden sind, die nicht direkt zum Erstellen des Objekts einer anderen Klasse zur Verfügung stehen. Es gibt einige abstrakte Klassen, die wir nicht erstellen können Aber neben der Klasse gibt es Methoden wie Calendar class. Wir können das Objekt von Calendar class nicht erstellen

Calendar cal = new Calendar(); 

in diesem Fall ist es falsch, aber es gibt die Methode getInstance(). Wir können die Methode aufrufen und die Klasse instanziieren

Beispiel:

Calendar cal=Calendar.getInstance();  

zu diesem Zeitpunkt verwenden wir die Factory-Methode im Frühlingsbeispiel:

<bean id="cal" class="Calendar" factory-method="getInstance">
1
Hemant vyas