【Spring】Spring相關知識點總結

Spring是什麼前端

Spring是一個一站式輕量級的開源框架

Spring Bean的三種配置方式:xml、註解和Javaweb

@Configuration
public class BeanConfig {
    @Bean
    public BeanFactory beanFactory(){
        return new BeanFactoryImpl();
    }
}

Spring的核心:spring

控制反轉(IoC)和麪向切面(AOP)

AOP代理主要分爲靜態代理和動態代理數據庫

AOP實現的關鍵在於 代理模式,AOP代理主要分爲靜態代理和動態代理。靜態代理的表明爲AspectJ;
動態代理則以Spring AOP爲表明。

(1)AspectJ是靜態代理的加強,所謂靜態代理,就是AOP框架會在編譯階段生成AOP代理類
所以也稱爲編譯時加強,他會在編譯階段將AspectJ(切面)織入到Java字節碼中
運行的時候就是加強以後的AOP對象。

(2)Spring AOP使用的動態代理,所謂的動態代理就是說AOP框架不會去修改字節碼
而是每次運行時在內存中臨時爲方法生成一個AOP對象
這個AOP對象包含了目標對象的所有方法
而且在特定的切點作了加強處理,並回調原對象的方法。

Spring中AOP動態代理的兩種實現方式:編程

JDK動態代理和CGLIB動態代理

Spring的優勢:後端

Spring將對象之間的依賴關係交由框架處理,減低組件的耦合性;
Spring對於主流的應用框架提供了很是方便的集成支持;
Spring提供的AOP功能,方便進行面向切面的編程,許多不容易用傳統OOP實現的功能能夠經過AOP輕鬆應付;
Spring框架設計精妙,Spring源碼是經典的學習範例

Spring的七大組成模塊:安全

Spring Core:核心類庫,提供IOC服務;
Spring Context:提供框架式的Bean訪問方式,以及企業級功能(JNDI、定時任務等);
Spring AOP:AOP服務;
Spring DAO:對JDBC的抽象,簡化了數據訪問異常的處理;
Spring ORM:對現有的ORM框架的支持;
Spring Web:提供了基本的面向Web的綜合特性,例如多方文件上傳;
Spring MVC:提供面向Web應用的Model-View-Controller實現

Spring事務的實現方式和實現原理:session

Spring事務的本質其實就是數據庫對事務的支持
沒有數據庫的事務支持,spring是沒法提供事務功能的。
真正的數據庫層的事務提交和回滾是經過binlog或者redo log實現的。

Spring的IOC有三種注入方式 :app

構造器注入、setter方法注入、註解注入

Spring框架支持如下五種bean的做用域:框架

singleton : bean在每一個Spring ioc 容器中只有一個實例。
prototype:一個bean的定義能夠有多個實例。
request:每次http請求都會建立一個bean,該做用域僅在基於web的Spring ApplicationContext情形下有效。
session:在一個HTTP Session中,一個bean定義對應一個實例。該做用域僅在基於web的Spring ApplicationContext情形下有效。
global-session:在一個全局的HTTP Session中,一個bean定義對應一個實例。該做用域僅在基於web的Spring ApplicationContext情形下有效。

缺省的Spring bean 的做用域是Singleton.

Spring支持兩種類型的事務管理:

編程式事務管理:這意味你經過編程的方式管理事務,給你帶來極大的靈活性,可是難維護。
聲明式事務管理:這意味着你能夠將業務代碼和事務管理分離,你只需用註解和XML配置來管理事務。

大多數Spring框架的用戶選擇聲明式事務管理,由於它對應用代碼的影響最小,所以更符合一個無侵入的輕量級容器的思想。聲明式事務管理要優於編程式事務管理,雖然比編程式事務管理(這種方式容許你經過代碼控制事務)少了一點靈活性。

SpringMVC 請求處理流程

一、  用戶發送請求被前端控制器DispatcherServlet捕獲
二、  DispatcherServlet收到請求調用處理器映射器HandlerMapping。
三、  處理器映射器找到具體的處理器(能夠根據xml配置、註解進行查找),生成映射信息 
    返回給DispatcherServlet。
四、  DispatcherServlet調用處理器適配器HandlerAdapter。
五、 處理器適配器根據映射信息適配調用具體的處理器(Controller,也叫後端控制器)
    Controller執行完成返回ModelAndView給DispatcherServlet。
六、  DispatcherServlet將ModelAndView傳給ViewReslover視圖解析器
    ViewReslover解析後返回具體視圖view。
七、 DispatcherServlet根據視圖View進行渲染視圖而且響應給用戶。

整個過程都是以DispatcherServlet爲中心進行的。

clipboard.png

你怎樣定義類的做用域?

當定義一個<bean> 在Spring裏,咱們還能給這個bean聲明一個做用域。它能夠經過bean 定義中的scope屬性來定義。如,當Spring要在須要的時候每次生產一個新的bean實例,bean的scope屬性被指定爲prototype。 另外一方面,一個bean每次使用的時候必須返回同一個實例,這個bean的scope 屬性 必須設爲 singleton。

解釋Spring支持的幾種bean的做用域

Spring框架支持如下五種bean的做用域:
singleton : bean在每一個Spring ioc 容器中只有一個實例。 
prototype :一個bean的定義能夠有多個實例。 
request :每次http請求都會建立一個bean,該做用域僅在基於web的Spring ApplicationContext情形下有效。 session :在一個HTTP Session中,一個bean定義對應一個實例。該做用域僅在基於web的Spring ApplicationContext情形下有效。
 global-session :在一個全局的HTTP Session中,一個bean定義對應一個實例。該做用域僅在基於web的Spring ApplicationContext情形下有效。

缺省的Spring bean 的做用域是Singleton.

Spring框架中的單例bean是線程安全的嗎?

不,Spring框架中的單例bean不是線程安全的。

解釋Spring框架中bean的生命週期

PS:能夠借鑑Servlet的生命週期,實例化、初始init、接收請求service、銷燬destroy。
Spring的核心容器會首先從XML 文件中讀取bean的定義,並實例化bean。 
而後根據bean的定義填充全部的屬性。 
而後根據bean內部實現了哪些接口依次調用一堆方法,最後初始化,最後的最後destroy。
若是bean實現了BeanNameAware 接口,Spring 傳遞bean 的ID 到 setBeanName方法。 
若是Bean 實現了 BeanFactoryAware 接口, Spring傳遞beanfactory 給setBeanFactory 方法。 
若是有任何與bean相關聯的BeanPostProcessors,Spring會在postProcesserBeforeInitialization()方法內調用它們。 
若是bean實現IntializingBean了,調用它的afterPropertySet方法,
若是bean聲明瞭初始化方法,調用此初始化方法。 
若是有BeanPostProcessors 和bean 關聯,這些bean的postProcessAfterInitialization() 方法將被調用。 
若是bean實現了 DisposableBean,它將調用destroy()方法。

clipboard.png

哪些是重要的bean生命週期方法? 你能重載它們嗎?

有兩個重要的bean 生命週期方法,第一個是setup , 
它是在容器加載bean的時候被調用。第二個方法是 teardown 它是在容器卸載類的時候被調用。
The bean 標籤有兩個重要的屬性(init-method和destroy-method)。
用它們你能夠本身定製初始化和註銷方法。它們也有相應的註解(@PostConstruct和@PreDestroy)
相關文章
相關標籤/搜索