最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Spring的懶加載機制原理和配置詳解

 更新時間:2023年10月20日 08:46:15   作者:架構(gòu)帥  
這篇文章主要介紹了Spring的懶加載機制原理和配置詳解,Spring提供了懶加載機制,所謂的懶加載機制就是可以規(guī)定指定的bean不在啟動時立即創(chuàng)建,而是在后續(xù)第一次用到時才創(chuàng)建,從而減輕在啟動過程中對時間和內(nèi)存的消耗,需要的朋友可以參考下

一、什么是懶加載

Spring默認會在容器初始化的過程中,解析xml或注解,創(chuàng)建配置為單例的bean并保存到一個map中,這樣的機制在bean比較少時問題不大,但一旦bean非常多時,spring需要在啟動的過程中花費大量的時間來創(chuàng)建bean ,花費大量的空間存儲bean,但這些bean可能很久都用不上,這種在啟動時在時間和空間上的浪費顯得非常的不值得。

所以Spring提供了懶加載機制。所謂的懶加載機制就是可以規(guī)定指定的bean不在啟動時立即創(chuàng)建,而是在后續(xù)第一次用到時才創(chuàng)建,從而減輕在啟動過程中對時間和內(nèi)存的消耗。

懶加載機制只對單例bean有作用,對于多例bean設置懶加載沒有意義,因為多例bean本來就是在使用時才創(chuàng)建的。

二、懶加載配置方式

1、xml配置

在xml文件里面,可以通過配置lazy-init="true"來啟用懶加載,。如下面的配置,設置cart啟用懶加載,這樣,在容器啟動的時候,就不會立即創(chuàng)建bean cart,直到第一次使用的時候才會創(chuàng)建。

<?xmlversion="1.0"encoding="UTF-8"?> 
<beansxmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans //www.springframework.org/schema/beans/spring-beans-3.2.xsd"> 
<beanid="cart"class="cn.tedu.beans.Cart"lazy-init="true">
</bean>
</beans>

上面是單獨設置某個bean的懶加載,我們還可以為全局配置懶加載,如下面的代碼所示。

<?xmlversion="1.0"encoding="UTF-8"?> 
<beansxmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans //www.springframework.org/schema/beans/spring-beans-3.2.xsd" default-lazy-init="true"> 
<beanid="cart"class="cn.tedu.beans.Cart">
    
</bean> 
</beans>

注意,如果同時設定全局和指定bean的懶加載機制,且配置不相同,則對于該bean局部配置會覆蓋全局配置。

2、注解配置(@Lazy)

在實際開發(fā)中,我們會大量用到注解的方式來配置bean,所以除了會用xml方式啟用懶加載外,還應該會通過注解啟用懶加載。測試代碼如下:

一個實體類Book:

package ztt.lazy;
 
/**
 * @Description:
 * @Auther: tt
 * @Date: 2020/3/1 14:31
 */
public class Book {
    private String bookName;
 
    public Book() {
        System.out.println("調(diào)用構(gòu)造方法,創(chuàng)建book...");
    }
 
    public String getBookName() {
        return bookName;
    }
 
    public void setBookName(String bookName) {
        this.bookName = bookName;
    }
 
    @Override
    public String toString() {
        return "Book{" +
                "bookName='" + bookName + '\'' +
                '}';
    }
}

配置類Config:

package ztt.lazy;
 
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
import org.springframework.context.annotation.Bean;
 
/**
 * @Description:
 * @Auther: tt
 * @Date: 2020/3/1 14:32
 */
public class Config {
 
    @Bean(value = "book")
    public Book getBook(){
        Book book = new Book();
        book.setBookName("《數(shù)據(jù)結(jié)構(gòu)》");
        return book;
    }
 
    @Test
    public void test(){
        ApplicationContext applicationContext = new AnnotationConfigApplicationContext(Config.class);
    }
}

在沒有用@Lazy注解標注的時候,不會啟動懶加載,在容器創(chuàng)建的時候,就會初始化bean,如下圖所示。

加上@Lazy注解,啟動懶加載,在容器創(chuàng)建的時候,不會初始化bean,如下圖所示。

然后,我們獲取這個bean,修改代碼如下:

    @Test
    public void test(){
        ApplicationContext applicationContext = new AnnotationConfigApplicationContext(Config.class);
        System.out.println("初始化容器成功!");
        System.out.println("獲取bean");
        Book book = (Book) applicationContext.getBean("book");
        System.out.println("從容器中取出book:");
        System.out.println(book);
    }

打印結(jié)果:

可以看到,創(chuàng)建容器的時候,沒有創(chuàng)建book對像,直到第一次使用的時候才創(chuàng)建。

@Lazy 的屬性value 取值有 true 和 false 這兩個, 默認值為 true。true 表示使用 延遲加載, false 表示不使用。

到此這篇關于Spring的懶加載機制原理和配置詳解的文章就介紹到這了,更多相關Spring懶加載原理和配置內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • java同一個類中,一個無事務方法調(diào)用一個有事務方法時,事務失效問題

    java同一個類中,一個無事務方法調(diào)用一個有事務方法時,事務失效問題

    本文詳細介紹了Spring框架中事務管理的實現(xiàn)原理,包括@Transactional注解的使用、事務的開啟、提交和回滾機制,以及代理對象的兩種實現(xiàn)方式(JDK動態(tài)代理和CGLIB代理),文章還探討了在同一個類中調(diào)用有事務方法時事務失效的原因,并提供了解決方法
    2024-12-12
  • Java Socket實現(xiàn)聊天室附1500行源代碼

    Java Socket實現(xiàn)聊天室附1500行源代碼

    Socket是應用層與TCP/IP協(xié)議族通信的中間軟件抽象層,它是一組接口。本篇文章手把手帶你通過Java Socket來實現(xiàn)自己的聊天室,大家可以在過程中查缺補漏,溫故而知新
    2021-10-10
  • Java避免死鎖_動力節(jié)點Java學院整理

    Java避免死鎖_動力節(jié)點Java學院整理

    在有些情況下死鎖是可以避免的。本文將展示三種用于避免死鎖的技術。對java避免死鎖的相關知識感興趣的朋友一起通過本文學習吧
    2017-06-06
  • springboot啟動加載CommandLineRunner @PostConstruct問題

    springboot啟動加載CommandLineRunner @PostConstruct問題

    這篇文章主要介紹了springboot啟動加載CommandLineRunner @PostConstruct問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-08-08
  • IntelliJ IDEA 創(chuàng)建spring boot 的Hello World 項目(圖解)

    IntelliJ IDEA 創(chuàng)建spring boot 的Hello World 項目(圖解)

    這篇文章主要介紹了IntelliJ IDEA 創(chuàng)建spring boot 的Hello World 項目的步驟詳解,需要的朋友可以參考下
    2018-01-01
  • Spring MVC的項目準備和連接建立方法

    Spring MVC的項目準備和連接建立方法

    SpringWebMVC是基于Servlet API的Web框架,屬于Spring框架的一部分,主要用于簡化Web應用程序的開發(fā),SpringMVC通過控制器接收請求,使用模型處理數(shù)據(jù),并通過視圖展示結(jié)果,感興趣的朋友跟隨小編一起看看吧
    2024-10-10
  • hibernate多表操作實例代碼

    hibernate多表操作實例代碼

    這篇文章主要介紹了hibernate多表操作實例代碼,分享了相關代碼示例,小編覺得還是挺不錯的,具有一定借鑒價值,需要的朋友可以參考下
    2018-02-02
  • java基于反射得到對象屬性值的方法

    java基于反射得到對象屬性值的方法

    這篇文章主要介紹了java基于反射得到對象屬性值的方法,結(jié)合實例形式分析了java基于反射獲取對象屬性值的相關實現(xiàn)方法與操作技巧,需要的朋友可以參考下
    2017-03-03
  • 使用spring-data-redis中的Redis事務

    使用spring-data-redis中的Redis事務

    這篇文章主要介紹了使用spring-data-redis中的Redis事務,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-07-07
  • Spring Boot中使用RSocket的示例代碼

    Spring Boot中使用RSocket的示例代碼

    這篇文章主要介紹了Spring Boot中使用RSocket的示例代碼,特別是spring boot 如何幫助抽象出更低級別的RSocket API,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-06-06

最新評論

健康| 庐江县| 乐安县| 胶州市| 湄潭县| 卓资县| 德兴市| 堆龙德庆县| 莱芜市| 射阳县| 尼勒克县| 鹤岗市| 确山县| 资溪县| 怀远县| 博罗县| 共和县| 绥江县| 海盐县| 江陵县| 尼木县| 宁强县| 桃江县| 元谋县| 神农架林区| 樟树市| 中超| 开原市| 丹寨县| 扶余县| 饶平县| 元阳县| 高陵县| 仪陇县| 特克斯县| 印江| 文登市| 闸北区| 酉阳| 天津市| 洱源县|