學JAVA嗎同學,這篇Sping boot 確定不瞭解下麼?

2020-10-25 14:00:54

從最初的單體架構,到現在的微服務架構,Spring Boot 都發揮著超大的作用,它簡潔快速開發的魅力,值得推廣到公司的任何專案中。目前,Spring Boot 擁有超棒的特性和它整合許多的優秀技術!
SpringBoot框架中還有兩個非常重要的策略:開箱即用和約定優於設定。

SpringBoot 是簡化 Spring 應用開發的一個框架。他整合了 Spring 的技術棧,提供各種標準化的預設設定。使得我們可以快速開發 Spring 專案,免掉 xml 設定的麻煩。降低 Spring 專案的成本。

一、SpringBoot 外部組態檔載入順序

這個挺多的,我們就幾個重要的。

  • 高優先順序的會覆蓋低優先順序的。

  • 命令列上的引數設定是優先順序最高的。

  • jar 包外的帶 profile 的組態檔。

  • jar 包內的帶 profile 的組態檔。

  • jar 包外的不帶 profile 的組態檔。

  • jar 包內的不帶 profile 的組態檔。

二、SpringBoot 如何擴充套件 SpringMVC 的設定

通過建立自己的類繼承 WebMvcConfigurerAdapter ,在類上面打上註解 @Configuration 。然後重寫裡面的方法即可。容器中的所有的 WebMvcConfigurer 會一起起作用。

在這裡插入圖片描述
如果我們不想使用 mvc 的自動設定,全部使用自己的。可以在設定類上增加註解 @EnableWebMvc 。這個註解可以匯入一個 webmvcconfigurationsupport 的類。然後 mvc 的自動設定類上的註解有這麼一句話,有一個條件註解,當沒有上面那個類的時候,才生效。

筆者整理了最新各路知識點合集包含有:JVM、MySQL、MyBatis、Dubbo、Liunx、TomCat等多種知識點,如果各位有需要的話歡迎加入我們的討論群1149778920來一起交流學習領取資料 暗號:qf

在這裡插入圖片描述

三、Spring控制反轉(IOC)

Spring IoC 的實現機制

Spring 中的 IoC 的實現原理就是工廠模式加反射機制。

interface Fruit {
   public abstract void eat();
 }
 
class Apple implements Fruit {
    public void eat(){
        System.out.println("Apple");
    }
}
 
class Orange implements Fruit {
    public void eat(){
        System.out.println("Orange");
    }
}
 
class Factory {
    public static Fruit getInstance(String ClassName) {
        Fruit f=null;
        try {
            f=(Fruit)Class.forName(ClassName).newInstance();
        } catch (Exception e) {
            e.printStackTrace();
        }
        return f;
    }
}
 
class Client {
    public static void main(String[] a) {
        Fruit f=Factory.getInstance("io.github.dunwu.spring.Apple");
        if(f!=null){
            f.eat();
        }
    }
}

四、BeanFactory 和 ApplicationContext有什麼區別?

BeanFactory和ApplicationContext是Spring的兩大核心介面,都可以當做Spring的容器。其中ApplicationContext是BeanFactory的子介面。

依賴關係

  • BeanFactory:是Spring裡面最底層的介面,包含了各種Bean的定義,讀取bean設定檔案,管理bean的載入、範例化,控制bean的生命週期,維護bean之間的依賴關係。

ApplicationContext介面作為BeanFactory的派生,除了提供BeanFactory所具有的功能外,還提供了更完整的框架功能:

-繼承MessageSource,因此支援國際化。

  • 統一的資原始檔存取方式。
  • 提供在監聽器中註冊bean的事件。
  • 同時載入多個組態檔。
    載入多個(有繼承關係)上下文 ,使得每一個上下文都專注於一個特定的層次,比如應用的web層。

載入方式

BeanFactroy採用的是延遲載入形式來注入Bean的,即只有在使用到某個Bean時(呼叫getBean()),才對該Bean進行載入範例化。這樣,我們就不能發現一些存在的Spring的設定問題。如果Bean的某一個屬性沒有注入,BeanFacotry載入後,直至第一次使用呼叫getBean方法才會丟擲異常。

ApplicationContext,它是在容器啟動時,一次性建立了所有的Bean。這樣,在容器啟動時,我們就可以發現Spring中存在的設定錯誤,這樣有利於檢查所依賴屬性是否注入。 ApplicationContext啟動後預載入所有的單範例Bean,通過預載入單範例bean ,確保當你需要的時候,你就不用等待,因為它們已經建立好了。

相對於基本的BeanFactory,ApplicationContext 唯一的不足是佔用記憶體空間。當應用程式設定Bean較多時,程式啟動較慢。

建立方式

BeanFactory通常以程式設計的方式被建立,ApplicationContext還能以宣告的方式建立,如使用ContextLoader。

註冊方式

BeanFactory和ApplicationContext都支援BeanPostProcessor、BeanFactoryPostProcessor的使用,但兩者之間的區別是:BeanFactory需要手動註冊,而ApplicationContext則是自動註冊。

SpringBoot 整合 redis

引入 redis 的啟動器。 data-redis 。引入後再組態檔進行設定 redis 的 host 。然後通過 redistemplate 就可以進行操作了。會亂碼,預設使用的是 jdk 的序列化 json 器。需要改成 jackson 。自己實現一個 RedisTmeplate 。泛型為 object , object 。再實現 CacheManager 。就會發現快取變成 json 形式了。
在這裡插入圖片描述

筆者在這裡給各位整合最新的真實大廠面試題,有需要的小夥伴可以加群:1149778920 暗號:qf
來自行領取
在這裡插入圖片描述