2012-07-05 18 views
5

¿Es posible en Autover solo los argumentos específicos de un constructor?Autocablear solo ciertos argumentos de un constructor

I definidos:

<bean class="MyClass"> 
    <constructor-arg name="name" value="object name" /> 
</bean> 

Con:

public class MyClass{ 
    private String name; 
    private MyDAO dao; 

    @Autowired 
    public MyClass(String name, MyDao dao){ 
     // assign... 
    } 

    // ... 
} 

Ahora me gustaría MyDao objeto a autowired, mientras que definir explícitamente name argumento. ¿Es posible?

La definición de un bean utilizando XML requiere definir manualmente todos los argumentos?

Respuesta

3

No se puede hacer eso con el constructor autowired, ya que afecta a todos los parámetros, pero se puede hacer esto:

public class MyClass{ 
    private String name; 

    @Autowired 
    private MyDAO dao; 

    public MyClass(String name){ 
     // assign only name 
    } 

    // ... 
} 

Es similar a tener un regulador para la DAO pero no expones a ese organismo público en tu clase.

+0

ok, entonces tengo que cambiar mi contructor ... o usar una referencia explícita en mi definición XML ... – davioooh

+0

Sí, eso dependería del resto de tu proyecto, si usa el autoenvío para la mayoría de las referencias de beans, o definición explícita en el XML, para mantener la coherencia. – Luciano

+0

Muchas gracias. – davioooh

2

Si leo la pregunta correctamente, me está preguntando si puede conectar en una instancia de MyDao que haya definido en otro lugar en su contexto, y proporcione un valor de cadena codificado para el parámetro de nombre. Si eso es correcto, podrá configurar su clase como

<bean class="MyClass"> 
    <constructor-arg value="Hardcoded string value for the name" /> 
    <constructor-arg ref="myDaoInstance" /> 
</bean> 

Y en su archivo de contexto en otro lugar

<bean class="MyDao" id="myDaoInstance> 
    //relevant config 
</bean> 
+0

que es una buena sugerencia, gracias! +1 – davioooh

0

parece que se debe añadir a la DAO @Autowired MyDao; declaración, luego cambia tu constructor para simplemente tomar el nombre param. Usted automáticamente será capaz de acceder MyDao

Cuestiones relacionadas