1. 程式人生 > 其它 >SpringBoot和SSM的區別+原始碼解析視訊

SpringBoot和SSM的區別+原始碼解析視訊

現在的SpringBoot和SSM的區別在哪?

1.springboot是一個輕配置的框架,以前spring的配置有很多,很火bean的裝配都沒有寫在配置檔案裡面,spring一開始為什麼要把配置寫在配置檔案裡面呢,實際上一開始的初衷是很好的,是為了解耦,以為程式碼經過編譯之後是看不到的,但是配置檔案編譯後是能看到的,java檔案編譯後變成class,但是配置檔案編譯後還是xml,通過xml我就能知道這個工程裡面大概配置了那些東西,而且能解耦能調配,把所有的配置檔案寫在xml有好處,但是到了真正的專案裡面會發現xml太重了,裡面放置了太多的東西,但是其實真正要頻繁去修改的東西沒有那麼多,可能使用者資料庫部分修改的比較多,但是例如檢視解析器,我用tampleaf就直接用了,不需要在自己去配置半天,然後最後又要求被改成jsp,那麼就非常抓狂

 

 

2。 如果兩個Controller裡面有寫相同的url,啟動會報錯

如果Controller和WebConfiguration裡面的addViewControllers中跳轉url一樣,那麼啟動不會報錯,會被Controller裡面的url所覆蓋

 

Springboot原始碼解析視訊:觀後感自己總結

1-7基礎鋪墊

Initializer初始化意思就是: 一個空房子裡面什麼都沒有,往裡面放點東西

1-1spi機制:tomcat實現servlet規範要實現一個ServletContainerInitializer介面,spi裡面寫著自己實現上面介面的位置,springs實現web.xml裡面的所有資訊都要載入到ServletContext的上下文環境裡面

1-2初始化容器:spring也要遵循Servlet規範 SpringServletContainerrInitializer也實現ServletContainerInitializer介面,然後初始化WebApplicationInitializer上下文環境,往裡面加東西(bean,上下文環境)。通過實現WebApplicationInitializer,在其中可以新增servlet,listener等,在載入Web專案的時候會載入這個介面實現類,從而起到web.xml相同的作用。

1-3認識ApplicationContext:是spring繼BeanFactory之外的另一個核心介面或容器,允許容器通過應用程式上下文環境建立、獲取、管理bean。為應用程式提供配置的中央介面。在應用程式執行時這是隻讀的,但如果實現支援這一點,則可以重新載入。ApplicationContext的主要實現類是ClassPathXmlApplicationContext和FileSystemXmlApplicationContext,前者預設從類路徑載入配置檔案,後者預設從檔案系統中裝載配置檔案

1-4BeanFactory和FactoryBean區別:BeanFactory是個Factory,也就是IOC容器或物件工廠,FactoryBean是個Bean。在Spring中,所有的Bean都是由BeanFactory(也就是IOC容器)來進行管理的。但對FactoryBean而言,這個Bean不是簡單的Bean,而是一個能生產或者修飾物件生成的工廠Bean,它的實現與設計模式中的工廠模式和修飾器模式類似。

BeanFactory:

BeanFactory定義了IOC容器的最基本形式,並提供了IOC容器應遵守的的最基本的介面,
也就是Spring IOC所遵守的最底層和最基本的程式設計規範。
在Spring程式碼中,BeanFactory只是個介面,
並不是IOC容器的具體實現,但是Spring容器給出了很多種實現,
如 DefaultListableBeanFactory、XmlBeanFactory、ApplicationContext等,都是附加了某種功能的實現。

FactoryBean:

一般情況下,Spring通過反射機制利用<bean>的class屬性指定實現類例項化Bean,
在某些情況下,例項化Bean過程比較複雜,如果按照傳統的方式,則需要在<bean>中提供大量的配置資訊。
配置方式的靈活性是受限的,這時採用編碼的方式可能會得到一個簡單的方案。
Spring為此提供了一個org.springframework.bean.factory.FactoryBean的工廠類介面,
使用者可以通過實現該介面定製例項化Bean的邏輯。
FactoryBean介面對於Spring框架來說佔用重要的地位,Spring自身就提供了70多個FactoryBean的實現。
它們隱藏了例項化一些複雜Bean的細節,
給上層應用帶來了便利。從Spring3.0開始,FactoryBean開始支援泛型,即介面宣告改為FactoryBean<T>的形式

視訊裡可以用User物件實現FactoryBean<User>介面,將其注入到容器,就可以通過SpringApplication.run方法拿到ApplicationContext,以呼叫該bean

1-5BeanDefinition:我們一般獲取物件的方式有兩種,一種是手動直接 new;另一種是交給 Spring 管理,Spring 將管理的物件稱之為 Bean,容器會先例項化 Bean,然後自動注入,例項化的過程就需要依賴 BeanDefinition。BeanDefinition 用於儲存 Bean 的相關資訊,包括屬性、構造方法引數、依賴的 Bean 名稱及是否單例、延遲載入等,它是例項化 Bean 的原材料,Spring 就是根據 BeanDefinition 中的資訊例項化 Bean。

1-6,7bean的建立過程和PostProcessor後置處理器:beanFactoryPostProcessor可以對BeanDefinition在未例項化之前進行拓展,BeanPostProcessor可在初始化前後進行干預

 

8-進入springboot原始碼階段

1-8:SpringAplication構造:從SpringbootApplication啟動類main方法中run進入,

最核心的一行程式碼重新整理容器 338:refreshContext(context),而前面的一切都是再做準備(準備環境,上下文,上下文初始化)。最終進入到org\springframework\context\support\AbstractApplicationContext.java類中的refresh()方法裡

1-13:Multicaster多路廣播器:裡面有很多的Listener,通過Listener去監聽事件,觀察者設計模式的核心

1-14:包裝類:利用反射進行包裝類賦值更加方便

1-15:自動裝配原理:(講義 自動裝配):

(25條訊息) Spring Boot面試殺手鐗————自動配置原理Morty的技術樂園-CSDN部落格springboot自動配置原理

版本1
Spring Boot啟動的時候會通過@EnableAutoConfiguration註解找到META-INF/spring.factories配置檔案中的所有自動配置類,
並對其進行載入,而這些自動配置類都是以AutoConfiguration結尾來命名的,
它實際上就是一個JavaConfig形式的Spring容器配置類,
它能通過以Properties結尾命名的類中取得在全域性配置檔案中配置的屬性如:server.port,
而XxxxProperties類是通過@ConfigurationProperties註解與全域性配置檔案中對應的屬性進行繫結的
版本2
在執行main方法的時候會執行主類上重要的@EnableAutoConfigration 註解會匯入一個自動配置選擇器去掃描每個jar包的META-INF/xxxx.factories 這個檔案,
這個檔案是一個key-value形式的配置檔案,裡面存放了這個jar包依賴的具體依賴的自動配置類。
這些自動配置類又通過@EnableConfigurationProperties 註解支援通過xxxxProperties 讀取application.properties/application.yml屬性檔案中我們配置的值。
如果我們沒有配置值,就使用預設值,這就是所謂約定>配置的具體落地點。