2010-11-10 17 views
13

Estoy usando Spring 3.0.x con mi proyecto. Mi práctica actual en @Autowired se ejemplifica de la siguiente manera:Debería proporcionar un setter para @Autowired

 

@Autowired 
private SomeType someMemberVariable; 
 

Es el uso de un método de selección mejor y/o preferida? Por colocador, quiero decir lo siguiente:

 

private SomeType someMemberVariable; 

@Autowired 
private void setSomeMemberVariable(SomeType newValue) 
{ 
    someMemberVariable = newValue; 
} 
 

entiendo mutable vs set inmutables, es decir fuera del alcance de esta pregunta.

Respuesta

15

No estoy usando un setter cuando uso @Autowired - agrega un código repetitivo.

Cada vez que necesito establecer una dependencia en una prueba de unidad, uso ReflectionTestUtils.setField(..) - no es seguro en tiempo de compilación como instalador, pero no tengo muchos problemas con él.

Como nota al margen, si se utiliza la primavera 3.0, puede empezar a utilizar @Inject en lugar de @Autowired

+1

Sospecho que @Inject sólo funciona para Java 6.0 y superior. Si sigue usando Java 5.0 (tal vez porque está usando WAS 6.1), @Autowired es el camino a seguir. – DwB

+0

@Inject funcionaría si lo tiene en el classpath. Puedes obtenerlo aquí https://code.google.com/p/atinject/ Lo estoy usando en tomcat. – Bozho

+0

¿Por qué '@ Inject' sobre' @ Autowired'? ¿Alguna referencia? – DerekY

16

Prefiero utilizar setters y getters porque le permite conectar manualmente el objeto cuando no lo está ejecutando en un contexto de primavera (es decir, establecer simulaciones en una prueba unitaria).

Cuestiones relacionadas