摘要:除了,還簡單介紹了對的支持,可以幫助應用將散落在各處的邏輯匯集于一處切面。當裝配的時候,這些切面能夠運行期編織起來,這樣就能呢個非常有效的賦予新功能。
第1章 Spring之旅 說明
1、本文參考了《Spring 實戰》重點內容,參考了GitHub上的代碼
2、每個人的學習方式不一樣,但目的是一樣的,活學活用。最近一直在聽《我們不一樣》
3、本文只為記錄作為以后參考,要想真正領悟Spring的強大,請看原書。
4、代碼和筆記在這里GitHub,對你有幫助的話,歡迎點贊。
5、萬千感慨,萬變不離其宗。一定要學好Java 8.
本章內容:
Spring的bean容器
介紹Spring的核心模塊
更為強大的Spring生態系統
Spring的新功能
1.2 容納你的Bean在基于Spring的應用中,你的應用對象存在于Spring容器(container)中.Spring負責創建對象,裝配它,并管理它們的整個生命周期,從生存到死亡(new 到finalize())。
首先重要的是了解容納對象的容器。理解容器將有助于理解對象是如何創建的。
容器是Spring框架的核心。Spring容器使用DI管理構成應用的組件,它會創建相互協作的組件愛你之間的聯系。這些對象更簡單干凈、更容易理解,更易于重用并且易于進行單元測試。
Spring容器并不只是只有一個,Spring自帶了多個容器實現,可以歸納為兩種不同的類型:
Bean工廠。由 org.springframework.beans.factory.BeanFactory接口定義的。是最簡單的容器。
應用上下文 由org.springframework.context.applicationContext接口定義的。基于BeanFactory構建,并提供應用框架級別的服務,例如:從屬性文件解析文本信息以及發布應用事件給感興趣的事件監聽器。
應用上下文比Bean工廠更受歡迎。bean工廠對于大多數應用來說太低級了。
1.2.1使用應用上下文Spring自帶了多種應用上下文:
AnonotationConfigApplicationContext:從一個或多個基于Java的配置文件類中加載Spring應用上下文
AnnotationConfigWebApplicationContext:從一個或多個基于Java配置類加載SpringWeb應用上下文
ClassPathXmlApplicationContext:從類路徑下的一個或多個XML配置文件中加載上下文定義,把應用上下文的定義文件作為類資源
FileSystemXmlapplicationContext:從文件系統下的一個或多個XMl配置文件中加載上下文定義
XmlWebapplicationContext:從web應用下的一個或多個XML配置文件中加載上下文定義
無論是從文件系統中裝配應用上下文還是從類路徑下裝配應用上下文,將bean加載到bean工廠的過程都是相似的。
加載一個FileSystemXmlApplicationContext: 在文件系統的路徑下查找knight.xml
ApplicationContext context = new FileSystemXmlApplicationContext("c:/knight.xml");
也可以使用ClassPathXmlApplicationContext: 所有的類路徑下查找knight.xml
ApplicationContext context = new ClassPathXmlApplicationCOntext("knight.xml");
也可以從Java配置中加載應用上下文,那么可以使用AnnotationConfigApplicationContext
ApplicationContext context = new AnonotationConfigApplicationContext( com.guo.knights.config.KnightConfig.class);
應用上下文準備就緒之后,我們就可以調用上下文的getBean()方法從Spring容器中獲取bean。
1.2.2 bean的生命周期在傳統的Java應用中,bean的生命周期很簡單。使用Java關鍵字new進行bean實例化,然后bean就可以使用了。
一旦bean不再使用,則由JCM自動進行垃圾回收。
相比之下,Spring容器中的bean聲明周期就顯得復雜多了。正確理解Spring bean的生命周期非常重要,因為你或許要利用Spring提供的擴展點來自定義bean的創建過程。
在bean工廠執行力若干啟動步驟;
1、Spring對bean進行實例化
2、Spring將值和 bean的引用注入到bean對應的屬性中。
3、如果bean實現類beanNameAware接口,Spring將bean的ID傳給setBean-Name()方法
4、如果bean實現類BeanFactoryAware接口,Spirng將調用setBeanFatory()方法,將BeanFactory容器實例傳入。
5、如果bean實現類applicationContextAware接口,Spring將調用setApplicationContext()方法,將bean所在的應用上下文的引用傳遞進來。
6、如果bean實現類BeanPostProcessor接口,Spring將調用它們的postProcessBeforInitialization()方法
7、如果bean實現類InitializingBean接口,Spring將調用它們的afterPropertiesSet()方法,如果類似的,如果bean使用init-method聲明了初始化方法,該方法也會被調用。
8、如果bean實現類BeanPostProcessor接口,Spring將調用它們的PostProcessAfterInitialization()方法
9、此時,bean已經準備就緒,可以被應用程序使用了,他們將一直駐留在應用上下文中,直到該應用上下文被銷毀。
如果bean實現類DisPosableBean接口,Spring將調用他的destroy()接口方法。同樣,如果bean使用destroy-mothod聲明銷毀方法,該方法也會被調用。
1.3俯瞰Spring風景線Srping框架通過關注于通過DI、AOP和消除模板樣式代碼來簡化企業級Java開發。即使這是Spring所能作的全部事情,那么Spring也值得一用,Spring實際上的功能超乎你的想象
1.3.1 Spring模塊這些模塊依據其所屬的功能劃分為6類不同的功能,總而言之,這些模塊為開發企業及應用提供了所需的一切 。但是你也不必將應用建立在整個Spring框架上,你可以自由的選擇合適自身應用需求的Spring模塊:當Spring不能滿足需求時,完全可以考慮其他選擇,事實上,Spring甚至提供了與其他的第三方框架和類庫的集成點,這樣你就不需要自己編寫代碼了。
Spring核心容器
容器是Spring最核心的部分,它管理者Spring應用中bean的創建、配置、管理。在該模塊中,包括了Spring bean工廠,它為Spring提供了DI的功能,甚至bean工廠,我們還會發現有多種Spring應用上下文的實現,每一種都提供了配置Spring的不同方式。
所有的Spring模塊都構建于核心容器之上。當你配置應用時,其實你隱式的使用率這些類。
SpringAOP模塊
在AOP模塊中,Spring對面向切面編程提供了豐富的支持。這個模塊是Spring應用系統中開發切面的基礎。與DI一樣,AOP可以幫助應用對象解耦,借助于AOP,可以將遍布系統的應用的關注點(例如:事務,安全,日志)從它們所應用的對象中解耦出來。
數據訪問與集成
使用JDBC編寫代碼通常會導致大量的樣式代碼,Spring的JDBC和DAO模塊抽象類這些樣板代碼,是我們的數據庫代碼變得簡單明了。還可以避免因為關閉數據庫資源失敗而引發的問題。該模塊在多種數據庫服務的錯誤信息之上構建了一個語義豐富的異常層,以后我們再也不需要解釋那些隱晦專有的SQL信息了。
Spring提供了ORM模塊,Spring的ORM模塊建立在DAO的支持之上,并為多個ORM框架提供了一種構建DAO的簡便方式 。Spring沒有嘗試去創建自己的ORM解決方,而是對許多流行的ORM框架進行了集成。包括Hibernater、Java Persisternce API、Java Data Object 和mybatis。Spring的事務管理支持所有的ORM框架以及JDBC。
Web與遠程調用
MVC(Model-View-Controller)模塊是一種普遍被接受的構建Web應用的方法,它可以幫助用戶將界面邏輯與應用邏輯分離,Java從來不缺少MVC框架,Apache的struts2、JSF、WebWorks都是可選的最流行的MVC框架。Spring遠程調用功能集成了RMI(Remote mehtod Invocation)、Hessian、CXF。Spring還提供了暴露和使用RESTAPI的良好支持。
Instrumentation
Spring的Instrumentation模塊提供了為JVM添加代理(agent)的功能.具體來講,它為Tomcat提供了一個織入代理,能夠為Tomcat傳遞類文件,就像這些文件時被類加載器加載的一樣。
Testing
通過該模塊,你會發現Spring為JNDI、Servlet和Portlet編寫單元測試提供了一系列的mock對象事項,對于繼承測試,該模塊為加載Spring應用上下文中的bean集合以及與Spirng上下文中的bean進行交互提供了支持。
如果僅僅停留在和性的Spring框架層面,我們將錯過Spring Portlio所提供的巨額財富。整個Spirng Portlio包括多個構建與核心Spring框架之上的框架和類庫。概括的來講,整個Spring Portlio幾乎為每一個領域的Java開發都提供了Spring編程模型
Spring Web Flow:是建立與Spring MVC框架之上,它為基于流程的會話式Web應用(購物車、向導功能)提供了支持。
Spirng Security:安全度與許多應用都是一個非常關鍵的切面。利用SpringAOP,SpringSecurity為Spring應用提供了聲明式的安全機制。
Spring Data:使得在Spring中使用任何數據庫都變得非常容易。一種新的數據庫種類,通常被稱為NoSQL數據庫,提供了使用數據的新方法,為所中數據庫提供了一種自動化的Repository機制,它負責為你創建Repository的實現
Spring Boot: Spring極大的簡化了眾多編程的任務,減少甚至消除了很多樣板式代碼。Spring Boot大量依賴于自動配置技術,它能夠消除大部分Spring配置。還提供了多個Starter項目,不管你是用Maven還是Gradle,這都能減少Spring的工程構建文件的大小。
1.4 Spring的新功能 1.4.1 Spring3.1新特性Spring 3.1帶來了多項有用的新特性 和增強,其中有很多都是關于如何簡化個改善配置的。除此之外,Spring3.1還提供了聲明式緩存的支持以及眾多針對SpringMVC的的功能增強。
借助于profile,就能根據應用布置在什么環境之中選擇不同的數據源
基于Java配置,Spring3.1增加了多個enable注解,啟用Spring特定功能
對聲明式緩存的支持,能夠 使用簡單的注解聲明緩存的邊界和規則,
開始支持Servlet3.0,包括在基于Java的配置中 申明Servlet和Filter,而不再借助于web.xml
1.4.2 Spring 3.2新特性Spring 3.2主要關注Spring MVC的一個發布版本。
Spring MVC 3.2帶來如下的功能提升
控制器(Controller)可以使Servlet3.0異步請求,允許在一個獨立的線程中處理請求,從而就愛那個Servlet線程解放出來處理更多的請求
@Autowired、@Value、@Bean注解能夠作為元注解。用于創建自定義的注解和bean的申明注解
Spring的聲明式緩存提供了對JCache0.5的支持。
1.4.3 Spring 4.0新特性Spring提供了對WebSocket編程的支持,
新的消息模塊,
支持Java8的新特性,比如:Lambda,函數式,
為 Groovy開發的應用程序提供了更加順暢的編程體驗
添加了條件化創建bean的功能
Spring4.0包含了Spring RestTemplate的一個新的異步實現。它會立即返回并且允許在操作完成后執行回調
添加了對多項JEE規范的支持,包括JMS 2.0 、JTA1.2 JPA 2.1
1.4.4 Spring 5.0新特性在Spring Framework代碼中使用JDK 8特性
響應式編程是Spring Framework 5.0最重要的功能之一
除了響應式特性之外,Spring 5還提供了一個函數式Web框架。
Spring Framework 5.0 引入了對 JetBrains Kotlin 語言的支持。
1.5 小節Spring致力于簡化企業級開發Java開發、促進代碼的松耦合。成功的關鍵在于依賴注入和AOP。
DI是組裝應用對象的一種方式,借助于這種方式對象無需知道依賴來自于何處或者依賴的具體實現方式。不同于自己獲取依賴對象,對象會在運行期賦予它們所依賴的對象。依賴對象通常會通過接口了解所注入的對象,這樣的話就能確保低耦合。
除了DI,還簡單介紹了Spring對AOP的支持,AOP可以幫助應用將散落在各處的邏輯匯集于一處——切面。當Spring裝配bean的時候,這些切面能夠運行期編織起來,這樣就能呢個非常有效的賦予bean新功能。
依賴注入和AOP是Spring框架最核心的部分,只有理解了如何應用Spring是最關鍵的功能。你才有能力使用Spring框架的其他功能。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/68530.html
摘要:啟用安全性這個簡單的默認配置指定了如何保護請求,以及客戶端認證用戶的方案。基于數據庫進行認證用戶數據通常會存儲在關系型數據庫中,并通過進行訪問。必須經過認證其他所有請求都是允許的,不需要認證。要求用戶不僅需要認證,還要具備權限。 Spring Security Spring Security 是基于Spring 應用程序提供的聲明式安全保護的安全框架。Spring Sercurity ...
摘要:之旅簡化開發的使命簡化開發為了降低開發的復雜性,采取如下關鍵策略基于的輕量級和最小侵入性編程通過依賴注入和面向接口實現松耦合基于切面和慣例進行聲明式編程通過切面和模版減少樣式代碼依賴注入耦合性具有兩面性一方面,緊密耦合的代碼難以測試難以復 Spring之旅 簡化Java開發 Spring的使命:簡化Java開發 為了降低Java開發的復雜性,采取如下關鍵策略:基于POJO的輕量級和最...
摘要:面向切面的本章主要內容面向切面編程的基本原理通過創建切面使用注解為切面注入依賴。什么是面向切面編程切面能夠幫我們模塊化橫切關注點。在使用面向切面編程時,我們仍然在一個地方定義通知功能,而無需修改受影響的類。切面切面是通知和切點的結合。 面向切面的Spring 本章主要內容: 面向切面編程的基本原理 通過POJO創建切面 使用@Aspect注解 為AspectJ切面注入依賴。 說明 ...
摘要:表示少女與緊耦合在它的構造函數中自行創建了。面向切面編程往往被定義為促使軟件系統實現關注點的分離一項技術系統由許多不同的組件組成,每個組件各負責一特定的功能。我們可以把切面想象為覆蓋在很多組件之上的一個外殼。 第1章 Spring之旅 說明 1、本文抄寫了《Spring 實戰》重點內容,參考了GitHub上的代碼 2、每個人的學習方式不一樣,但目的是一樣的,活學活用。最近一直在聽《我...
摘要:兩種方式來表示的應用上下文。日志,事務管理和安全這樣的系統服務經常融入到具有核心業務邏輯的組件中去,這些系統服務通過被稱為橫切關注點。容器使用管理構成應用的組件,他會創建相互協作的組件之間的關聯。的生命周期四俯瞰的風景線模塊,,,, 完整代碼請見:https://github.com/codercuixi...為了降低Java開發的復雜性,Spring采用了以下4種策略: 基于poj...
閱讀 1155·2021-10-15 09:39
閱讀 3053·2021-09-10 10:50
閱讀 3455·2019-08-30 15:53
閱讀 1878·2019-08-30 15:52
閱讀 2565·2019-08-29 15:31
閱讀 1978·2019-08-26 13:43
閱讀 2594·2019-08-26 13:37
閱讀 1445·2019-08-23 18:31