Spring: ¿Se llamará primero a los métodos Setter en una clase con Spring?

Tengo una pregunta con respecto a Spring, disculpe si mi pregunta es tonta. Por favor vea este código

public class HomePageController extends AbstractController {

        private GeekNewsService service;

      protected ModelAndView handleRequestInternal(HttpServletRequest req, HttpServletResponse res) throws Exception {
      List<NewsArticle> articles = service.getArticleOverviews();
      return new ModelAndView( "home", "articles", articles );
     }

    public void setGeekNewsService( GeekNewsService service ) {
      this.service = service;
   }

}

Aquí mi pregunta es que, dentro del método handleRequestInternal, ¿por qué no hubo ninguna NullPointerException en esta línea service.getArticleOverviews() ?? (¿Porque la creación de objetos real ocurrirá con la ayuda de SetterInjection en setMethod)?

¿Hay alguna regla en Spring que, cuando se ha llamado a una clase, los métodos setXXX deben invocarse al principio?

preguntado el 12 de junio de 12 a las 16:06

1 Respuestas

Sí, este es el contrato básico que te da Spring: antes de que devuelva cualquier bean, tienes la garantía de que este bean se inicializa en función de tu configuración. En otras palabras, nunca podrá llamar a ningún método comercial de ningún bean antes de la inicialización completa de ese bean (inyección de setter, inyección de campo, devoluciones de llamada posteriores a la construcción).

Respondido el 12 de junio de 12 a las 16:06

Gracias, ¿entonces quiere decir que dependiendo del archivo de configuración de Spring Beans, todas las inicializaciones de Beans suceden al inicio de la aplicación? (Por favor, corríjame si estoy equivocado ) - Pawan

@ yyyi777: esto es un poco más complicado, los beans inicializados perezosos que no son dependencias de beans inicializados con entusiasmo se crean en el primer acceso. Pero normalmente sí, todos los beans se crean e inicializan al inicio en el orden correcto. - Tomasz Nurkiewicz

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.