2011-01-27 12 views
5

Cómo se pueden especificar las referencias de beans correctas, cuando utilizo el patrón de método de fábrica Abstrarct con Spring.Spring especifique las referencias de beans correctas como argumentos de método de fábrica

Obtengo errores en los argumentos del constructor en el Spring dispatcher-servlet.xml.

los errores:

fábrica tipos de argumentos método ambiguas - ¿Ha especificado las referencias correctas de frijol como argumentos del método de fábrica?

corta despachador-servlet.xml

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

Aquí está mi código:

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

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

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

Gracias, mkohan

Respuesta

3

Si su fábrica findCategory toma una enumeración dada, entonces la primavera lo hace todo por ti.

por ejemplo

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

ahora en primavera

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

no quiero iniciar un valor para el argumento. Quiero que el método abstracto de fábrica pase ese valor en tiempo de ejecución. ¿Tengo que iniciar un valor para el argumento? – mkohan

+0

Todo Spring está en tiempo de ejecución. Sospecho que se refiere a la sustitución de variables, simplemente elimine el atributo type de la etiqueta constructor-arg. – harschware

+0

Cambié a esto: Obtuve estos errores: Error al crear bean con el nombre 'myFactory' definido en el recurso ServletContext: dependencia insatisfecha expresada a través del argumento constructor con índice 0 de tipo [CategoryFactory $ CategoryType]: No se pudo convertir el valor del argumento de método de fábrica de tipo [java.lang.String] al tipo requerido [CategoryFactory $ CategoryType]: Error al convertir el valor de tipo 'java.lang.String' al tipo requerido'CategoryFactory $ CategoryType '; – mkohan

1
  1. Lazy inicializar el grano si es posible
  2. Si desea utilizar una fábrica de método y sin pasar ningún argumento del constructor en la configuración del frijol, use

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

    para especificar argumentos nulos

Cuestiones relacionadas