Recherche…


Initialisation différée dans la classe de configuration

@Configuration
// @Lazy - For all Beans to load lazily
public class AppConf {

    @Bean
    @Lazy
    public Demo demo() {
        return new Demo();
    }
}

Pour la numérisation de composants et le câblage automatique

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

    .......
 }

Exemple d'initiation paresseuse au printemps

Le @Lazy nous permet de demander au conteneur IOC de retarder l'initialisation d'un bean. Par défaut, les beans sont instanciés dès que le conteneur IOC est créé. Les @Lazy nous permettent de modifier ce processus d'instanciation.

lazy-init au printemps est l'attribut de la balise bean. Les valeurs de lazy-init sont vraies et fausses. Si lazy-init a la valeur true, alors ce bean sera initialisé lorsqu'une requête est envoyée au bean. Ce haricot ne sera pas initialisé lorsque le conteneur de printemps est initialisé. Si lazy-init est faux, le bean sera initialisé avec l'initialisation du conteneur de printemps et c'est le comportement par défaut.

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");
   }
} 

SpringTest.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");
   }
}

Sortie

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


Modified text is an extract of the original Stack Overflow Documentation
Sous licence CC BY-SA 3.0
Non affilié à Stack Overflow