Spring容器的懶加載


1、單例模式的對象什么時候被創建?是使用getBean()方法獲取對象的時候創建呢?還是創建spring容器的時候創建?

我們可以測試一下:

先定義一個example類,為其定義一個無參數的構造方法:

public class ExampleBean {
   public ExampleBean() {
       System.out.println("創建了ExampleBean對象");
   }
   public void execute() {
       System.out.println("調用了execute方法");
   }
   public void init() {
       System.out.println("正在執行初始化方法中的操作。。。。");
   }
   public void destroy() {
       System.out.println("對象資源釋放。。。");
   }
}

我們在applicationContext.xml文件中指定其為單例模式:

<!-- 創建一個ExampleBean對象 -->
    <bean id ="example" class="com.zlc.test.ExampleBean" init-method = "init"
     destroy-method="destroy" scope="singleton">
    </bean>

運行以下的代碼:

public static void main(String[] args) {
        String conf = "applicationContext.xml";
        //創建容器對象
        AbstractApplicationContext ac = new ClassPathXmlApplicationContext(conf); 
               
    }

運行結果為:

由此我們可以看出,單例模式的對象,是在創建spring容器時就會馬上創建的。但是非單例模式的對象並不會在此時馬上創建

我們也可以設置單例模式的對象延遲加載,並不在創建spring容器時馬上創建,而是在需要使用時再創建,也就是使用getBean()方法獲取時再加載,設置延遲加載的方法是:

<bean lazy-init="true"></bean>

添加這個屬性后的xml配置如下所示;

 <bean id ="example" class="com.zlc.test.ExampleBean" init-method = "init"
     destroy-method="destroy" scope="singleton" lazy-init="true">

加了這樣的設置以后,就不會在創建spring容器時馬上創建單例模式的對象了

 還可以為一組bean設置懶加載,初始化方式等:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd" 
default-lazy-init
="true" default-init-method="init"> <bean id = "computer" class="com.zlc.test.Computer"> <constructor-arg index="0" ref="date"></constructor-arg> </bean> <bean id="date" class="java.util.Date"> </bean> </beans>

這樣設置,即可為<beans></beans>中包含的bean統一指定懶加載方式以及初始化方法等。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM