Pregunta

¿Cuál es más correcto?

¿Esto (con la anotación @AutoWired en el método)?

@Controller
public class MyController
{
    private MyDao myDao;

    @Autowired
    public MyController(MyDao myDao)
    {
        this.myDao = myDao;
    }

¿Esto (con la anotación @autowired en la propiedad)?

@Controller
public class MyController
{
    @Autowired
    private MyDao myDao;

    public MyController(MyDao myDao)
    {
        this.myDao = myDao;
    }

¿A dónde se supone que se supone la anotación de @Autowired?

¿Fue útil?

Solución

De acuerdo a el javadoc para autowired, la anotación se puede utilizar en "un constructor, campo, método establecido o método de configuración". Ver la documentación completa para más detalles.

Personalmente prefiero su primera opción (inyección de constructor), porque el myDao El campo se puede marcar como final:

@Controller
public class MyControllear {
    private final MyDao myDao;

    @Autowired
    public MyController(MyDao myDao) {
      this.myDao = myDao;
    }

La inyección de constructor también le permite probar la clase en una prueba unitaria sin código que depende de la primavera.

La segunda opción estaría mejor escrita como:

@Controller
public class MyControllear {
    @Autowired
    private MyDao myDao;

    MyController() {
    }

Con la inyección de campo, Spring creará el objeto y luego actualizará los campos marcados para la inyección.

Una opción que no mencionó fue poner @Autowired en un método de setter (inyección de setter):

@Controller
public class MyControllear {
    private MyDao myDao;

    MyController() {
    }

    @Autowired
    public void setMyDao(MyDao myDao) {
      this.myDao = myDao;
    }

No tienes que elegir uno u otro. Puede usar la inyección de campo para algunas dependencias e inyección de constructor para otras para el mismo objeto.

Otros consejos

La anotación va con la propiedad, porque eso es lo que se está alzando; la propiedad se establecerá automáticamente. Este tutorial tiene un buen ejemplo. Este ejemplo más avanzado Muestra cómo usar calificadores para desambiguar el cableado.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top