Buscar..


Inicialización perezosa 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 cableado automático

@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;

    .......
 }

Ejemplo de Lazy Init en primavera

@Lazy nos permite dar instrucciones al contenedor IOC para retrasar la inicialización de un bean. Por defecto, los beans se crean una instancia tan pronto como se crea el contenedor IOC. @Lazy nos permite cambiar este proceso de @Lazy instancias.

Lazy-init en primavera es el atributo de la etiqueta bean. Los valores de lazy-init son verdaderos y falsos. Si lazy-init es verdadero, entonces el bean se inicializará cuando se realice una solicitud para el bean. Este bean no se inicializará cuando se inicialice el contenedor de resorte. Si lazy-init es falso, el bean se inicializará con la inicialización del contenedor spring y este es el comportamiento predeterminado.

app-conf.xml

<beans xmlns="http://www.springframework.org/schema/beans" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:util="http://www.springframework.org/schema/util"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-3.0.xsd">
 
<bean id="testA" class="com.concretepage.A"/>
<bean id="testB" class="com.concretepage.B" lazy-init="true"/>

A.java

package com.concretepage;
public class A {
public A(){
    System.out.println("Bean A is initialized");
   }
}

B.java

package com.concretepage;
public class B {
public B(){
    System.out.println("Bean B is initialized");
   }
} 

Prueba de primavera.java

package com.concretepage;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class SpringTest {
public static void main(String[] args) {
     ApplicationContext context = new ClassPathXmlApplicationContext("app-conf.xml");
     System.out.println("Feth bean B.");
     context.getBean("testB");
   }
}

Salida

Bean A is initialized
Feth bean B.
Bean B is initialized


Modified text is an extract of the original Stack Overflow Documentation
Licenciado bajo CC BY-SA 3.0
No afiliado a Stack Overflow