Spring 中的 Lazy Init 示例

@Lazy 允許我們指示 IOC 容器延遲 bean 的初始化。預設情況下,只要建立 IOC 容器就會例項化 bean,@Lazy 允許我們更改此例項化過程。

spring 中的 lazy-init 是 bean 標籤的屬性。lazy-init 的值為 true 和 false。如果 lazy-init 為 true,則在向 bean 發出請求時將初始化該 bean。初始化 spring 容器時,不會初始化此 bean。如果 lazy-init 為 false,則將使用 spring 容器初始化初始化 bean,這是預設行為。

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

輸出

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