摘要:構(gòu)造函數(shù)注入通過調(diào)用類的構(gòu)造函數(shù),將接口實現(xiàn)類通過構(gòu)造函數(shù)變量傳入。而在中,其使用橫切技術(shù),將這類代碼從原屬的封裝對象中提取出來,封裝到一個可重用模塊中,稱為。
最近實習用到Spring的開發(fā)框架,但是之前沒有接觸過,因此希望利用網(wǎng)上的資源來學習以下。
Spring官方給出了非常全面的介紹,非常適合我這種完全的小白……
在這一系列學習中,我閱讀的主要資源是5.1.2 Reference Doc.,以及論壇大神的講解blog。另外,Spring官方也給出了非常詳細的API文檔,適合較為熟悉的使用者查閱。
由于本人完全入門級,因此決定從reference一點點讀起。
官方文檔:Spring Framework Documentation
https://docs.spring.io/spring...
由于缺乏相關(guān)概念基礎(chǔ),因此本文開頭對Spring官方文檔的結(jié)構(gòu)進行簡單介紹,之后講解Spring框架的兩大核心:IoC、AOP,在下一篇文章中再開始詳細學習Spring官方文檔。
documentation主要包括6部分:Core, Testing, Data Access, Web Reactive, Integration, Language。
Core這一部分介紹了Spring的一些基礎(chǔ)核心的技術(shù)和功能,屬于Spring必讀內(nèi)容。Spring Framework中最重要的一部分是控制反轉(zhuǎn)容器(Inversion of Control container, IoC),而這一功能是由面向方面的編程技術(shù)(Aspect-Oriented Programming technology, AOP)實現(xiàn)的。IoC和AOP可以看作Spring框架最重要的兩個核心。
為了更詳細地闡釋Spring Framework的功能,這里先介紹一下IoC和AOP兩個概念。
概念引入 1.IoC(控制反轉(zhuǎn))與DI(依賴注入)這一部分借鑒了論壇大神的分享:“談?wù)剬pring IOC的理解”,https://blog.csdn.net/qq_2265...
這篇blog除講解控制反轉(zhuǎn)和依賴注入的理論認識以外,還提供了一個小的實例分析,值得閱讀。
IoC
IoC本質(zhì)上是一種設(shè)計思想,在IoC中,開發(fā)者將設(shè)計好的對象交給容器控制,而不是在對象內(nèi)直接控制。理解IoC的關(guān)鍵點如下:
誰控制誰,控制什么:在傳統(tǒng)的Java程序設(shè)計中,開發(fā)者在對象內(nèi)部通過new創(chuàng)建新對象,是程序主動創(chuàng)建依賴對象;而在IoC中,專門有一個容器創(chuàng)建這些對象,即由IoC控制對象的創(chuàng)建。因此在IoC中,IoC容器控制對象,主要控制外部資源獲取(包括對象、文件等)
為何是反轉(zhuǎn),哪些方面反轉(zhuǎn):傳統(tǒng)java程序設(shè)計中,是由開發(fā)者自己在對象中主動控制去直接獲取依賴對象,即正轉(zhuǎn);而在反轉(zhuǎn)中,是容器幫忙創(chuàng)建及注入依賴對象。反轉(zhuǎn)的含義即,容器幫我們查找并注入依賴對象,對象只是被動地接收依賴對象。反轉(zhuǎn)的實際是依賴對象的獲取過程。
IoC是Spring的核心。對于Spring而言,IoC的含義即由Spring來負責控制對象的生命周期和對象間關(guān)系。也就是說,所有的類都會在Spring的容器中登記,我們告訴Spring我們是什么、需要什么,由Spring在系統(tǒng)運行到適當?shù)臅r候,將需要的東西主動給我們,同時也把我們交給其他需要我們的東西。
在傳統(tǒng)java開發(fā)中,所有類的創(chuàng)建、銷毀(即對象的生命周期)都由引用它的對象控制,而在Spring中,這一控制權(quán)轉(zhuǎn)移到了Spring容器中。
DI
DI(Dependency Injection, 依賴注入)可以理解為對IoC從另一個角度的描述。
DI的含義即,組件之間的依賴關(guān)系是由容器在運行期間決定的,由容器動態(tài)地將某個依賴關(guān)系注入到組件之中,即容器動態(tài)地向某個對象提供它所需要的外部資源(對象、資源、常量數(shù)據(jù))。
這里所謂的“依賴”,指的就是程序中的對象依賴于IoC容器。
IoC注入的類型
包括三種:構(gòu)造函數(shù)注入、屬性注入和接口注入。
其中,Spring支撐構(gòu)造函數(shù)注入和屬性注入兩種。
構(gòu)造函數(shù)注入:通過調(diào)用類的構(gòu)造函數(shù),將接口實現(xiàn)類通過構(gòu)造函數(shù)變量傳入。這種方法在調(diào)用類創(chuàng)建的時候就將接口實現(xiàn)類的依賴傳入。
屬性注入:有選擇地通過setter方法完成調(diào)用類所需依賴的注入,而無需在創(chuàng)建類時注入,更加靈活方便。
接口注入:將調(diào)用類所有依賴注入的方法抽取到一個接口中,調(diào)用類通過實現(xiàn)該借口提供相應的注入方法。通過接口注入需要額外聲明一個接口,增加了類的數(shù)目,且其效果與屬性注入無本質(zhì)區(qū)別,因此不提倡。
通過容器完成依賴關(guān)系的注入:由容器完成類的初始化與裝配工作,讓開發(fā)者從底層實現(xiàn)類的實例化、依賴關(guān)系裝配等工作中脫離出來,專注于業(yè)務(wù)邏輯開發(fā)工作。Spring框架即這樣的容器,它通過配置文件或注解描述類和類之間的依賴關(guān)系,自動完成類的初始化和依賴注入工作。
2.AOP面向方面程序設(shè)計AOP概念的學習借鑒了這篇blog:“Spring3: AOP”, http://www.cnblogs.com/xrq730...
AOP可以理解為面向?qū)ο缶幊蹋∣OP)的補充和完善。OOP通過引入封裝、繼承、多態(tài)等概念建立了對象的層次結(jié)構(gòu),適用于定義對象間的縱向關(guān)系。但對于對象的橫向關(guān)系的定義,OOP并不適用,因此提出了AOP的概念。
AOP主要關(guān)注影響了多個類的公共行為,例如日志代碼、異常處理、安全性等,這類代碼與所對應的對象的核心功能(業(yè)務(wù)功能)毫無關(guān)系。在OOP中,這類代碼會導致大量冗余,不利于模塊重用。而在AOP中,其使用“橫切”(cross cutting)技術(shù),將這類代碼從原屬的封裝對象中提取出來,封裝到一個可重用模塊中,稱為“Aspect”。這樣的操作降低了模塊間的耦合度,利于操作和維護。
在AOP中,其將軟件系統(tǒng)分為“核心關(guān)注點”和“橫切關(guān)注點”。其中,“橫切關(guān)注點”為橫切出來的aspect,“核心關(guān)注點”為然軟件系統(tǒng)的主體業(yè)務(wù)代碼。AOP的作用即將二者分離。
對Spring Framework中兩大核心概念的簡答介紹就到這里,下一篇開始正式學習Spring framework的文檔。
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/72162.html
摘要:首先介紹系列文章內(nèi)容及官方文檔情況。官方文檔中的容器及介紹的容器主要由如下兩個包構(gòu)成以及。這一接口提供了配置機制以及一些基本的功能。該類以方式描述組成應用的對象以及對象間依賴關(guān)系。在文件中,使用對相關(guān)元素進行標注,在下一級使用標簽。 首先介紹系列文章內(nèi)容及Spring Framework官方文檔情況。 在這一系列學習中,我閱讀的主要資源是5.1.2 Reference Doc.,以及論...
摘要:框架最初是由編寫的,并且年月首次在許可下發(fā)布。在一個方法執(zhí)行之后,只有在方法退出拋出異常時,才能執(zhí)行通知在建議方法調(diào)用之前和之后,執(zhí)行通知。方法執(zhí)行之后,不考慮其結(jié)果,執(zhí)行通知。 導讀: 在上篇文章的結(jié)尾提到了Spring Boot 提供了一系列的框架整合(Starter POMs)幫助我們提升開發(fā)效率,但是這并不意味著我們不需要學習這些框架,反而更需要去學習,通過學習這些框架可以使...
摘要:入門和學習筆記概述框架的核心有兩個容器作為超級大工廠,負責管理創(chuàng)建所有的對象,這些對象被稱為。中的一些術(shù)語切面切面組織多個,放在切面中定義。 Spring入門IOC和AOP學習筆記 概述 Spring框架的核心有兩個: Spring容器作為超級大工廠,負責管理、創(chuàng)建所有的Java對象,這些Java對象被稱為Bean。 Spring容器管理容器中Bean之間的依賴關(guān)系,使用一種叫做依賴...
摘要:入門篇學習總結(jié)時間年月日星期三說明本文部分內(nèi)容均來自慕課網(wǎng)。主要的功能是日志記錄,性能統(tǒng)計,安全控制,事務(wù)處理,異常處理等等。 《Spring入門篇》學習總結(jié) 時間:2017年1月18日星期三說明:本文部分內(nèi)容均來自慕課網(wǎng)。@慕課網(wǎng):http://www.imooc.com教學示例源碼:https://github.com/zccodere/s...個人學習源碼:https://git...
閱讀 3074·2021-09-03 10:33
閱讀 1297·2019-08-30 15:53
閱讀 2650·2019-08-30 15:45
閱讀 3409·2019-08-30 14:11
閱讀 563·2019-08-30 13:55
閱讀 2608·2019-08-29 15:24
閱讀 1946·2019-08-26 18:26
閱讀 3596·2019-08-26 13:41