2011-01-27 12 views
5

Come specificare i rifrattivi dei bean corretti, Quando utilizzo il pattern del metodo factory Abstrarct con Spring.Spring specifica i riferimenti bean corretti come argomenti del metodo factory

Ottengo gli errori degli argomenti del costruttore sulla sorgente dispatcher-servlet.xml.

gli errori:

ambigui fabbrica tipi metodo argomento - lo specificano i riferimenti di fagioli corretti come argomenti di metodo fabbrica?

breve dispatcher-servlet.xml

<bean id="myFactory" class="cwsei.spring.dao.CategoryFactory" factory-method="findCategory"> 
<constructor-arg type="java.lang.Enum" value="${categoryType}" /> 
</bean> 

Ecco il mio codice:

public abstract class Category { 
public abstract List list(int departId); 
.. 
} 
public class CategoryFactory { 

public enum CategoryType { firstclass,secondClass,...} 

public static Category findCategory(CategoryType categoryType) { 
... 
} 
} 

Grazie, mkohan

risposta

3

Se la fabbrica findCategory prende un dato enum, poi primavera fa tutto per te.

esempio

public class enum X { A, B } 
public CategoryFactory findCategory(X someX) 

ora nella primavera

<constructor-arg value="A" /> 
+0

Non voglio avviare un valore per l'argomento. Voglio che il metodo Abstract factory passi quel valore in fase di esecuzione. Devo iniziare un valore per argomento? – mkohan

+0

Tutto di Spring è in fase di esecuzione. Sospetto che tu ti riferisca alla sostituzione delle variabili, basta rimuovere l'attributo type dal tag constructor-arg. – harschware

+0

Ho modificato questo: Ho ricevuto questi errori: Errore nella creazione di bean con nome 'myFactory' definito nella risorsa ServletContext: Dipendenza insoddisfatta espressa tramite argomento costruttore con indice 0 di tipo [CategoryFactory $ CategoryType]: Impossibile convertire il valore dell'argomento del metodo factory di tipo [java.lang.String] nel tipo richiesto [CategoryFactory $ CategoryType]: Impossibile convertire il valore di tipo 'java.lang.String' nel tipo richiesto'CategoryFactory $ CategoryType '; – mkohan

1
  1. pigro inizializzare il fagiolo, se possibile,
  2. Se si desidera utilizzare una fabbrica-metodo e senza passare eventuali argomenti del costruttore in la configurazione del bean, utilizzare

    <constructor-arg><null/></constructor-arg> 
    

    per specificare gli argomenti nulli

Problemi correlati