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