mvc ioc injection framework example espaƱol dependency spring spring-ioc

injection - spring ioc example



Comportamiento predeterminado de Spring para lazy-init (5)

Cuando usamos lazy-init = "default" como atributo en el elemento, el contenedor toma el valor especificado por default-lazy-init = "true | false" del elemento y lo usa como lazy-init = "true | false ".

Si el atributo default-lazy-init no está presente en el elemento, lazy-init = "default" en el elemento se comportará como si fuera lazy-init- "false".

Soy principiante hasta la primavera, ESP Inversion of control. Me desconcertó entender la diferencia entre los siguientes

<bean id="demo" class="Demo" lazy-init="false"/> <bean id="demo" class="Demo" lazy-init="true"/> <bean id="demo" class="Demo" lazy-init="default"/>

A mi entender: lazy-init = false crea el bean al inicio y lazy-init = true no crea un bean en el inicio sino que crea el bean a petición de un bean en particular. Corrígeme aquí, si mi interpretación es incorrecta.

¿Cuál es exactamente el comportamiento predeterminado de lazy-init? ¿Cómo crearía una instancia?


El comportamiento predeterminado es falso:

De forma predeterminada, las implementaciones de ApplicationContext crean y configuran con entusiasmo todos los beans singleton como parte del proceso de inicialización. En general, esta preinstalación es deseable, ya que los errores en la configuración o en el entorno se descubren de inmediato, en lugar de horas o incluso días más tarde. Cuando este comportamiento no es deseable, puede evitar la creación de instancias previas de un bean singleton marcando la definición del bean como iniciada en modo perezoso. Un bean inicializado de forma diferida le dice al contenedor IoC que cree una instancia de bean cuando se solicite por primera vez, en lugar de al inicio.

Sugiero leer


La configuración de lazy-init="default" en un bean solo se refiere a lo que establece el atributo default-lazy-init del elemento beans encerrado. El valor predeterminado implícito de default-lazy-init es false .

Si no se especifica ningún atributo lazy-init en un bean, siempre se creará una instancia con entusiasmo.


Para aquellos que vienen aquí y están usando la configuración de Java, pueden establecer el Bean en lazy-init usando anotaciones como esta:

En la clase de configuración:

@Configuration // @Lazy - For all Beans to load lazily public class AppConf { @Bean @Lazy public Demo demo() { return new Demo(); } }

Para escaneo de componentes y auto-cableado:

@Component @Lazy public class Demo { .... .... } @Component public class B { @Autowired @Lazy // If this is not here, Demo will still get eagerly instantiated to satisfy this request. private Demo demo; ....... }


lazy-init es el atributo de bean. Los valores de lazy-init pueden ser verdaderos y falsos. Si lazy-init es verdadero , ese bean se inicializará cuando se haga una solicitud a bean. Este bean no se inicializará cuando se inicialice el contenedor de resorte y si lazy-init es falso, entonces el bean se inicializará con la inicialización del contenedor de resorte.