1. 程式人生 > >IOC和DI的概念,以及Spring框架的介紹

IOC和DI的概念,以及Spring框架的介紹

對於Java開發者來說,Spring肯定是一個避不開的技術。所以準備系統的學下Spring框架。 我給自己設計的學習路線是這樣的:首先閱讀下Spring的官方文件(注意Spring官網上有很多專案,Spring的基礎框架是Spring FrameWork這個專案),記錄我認為重要的內容,方便後續回顧;到這邊對Spring已經有了基本的認識,然後是找一到兩本關於Spring原始碼的書,深入學習下Spring框架的原理性內容;最後是對於Spring的關鍵特性單獨寫部落格記錄,其實也就是對第二步的記錄,你看了原始碼分析之後會對Spring的實現原理也有些瞭解。這些東西你不記錄的話會很快遺忘。部落格是一個很好的記錄和分享自己所學的工具。所以後續我會對Spring的啟動過程、自動注入、AOP和Spring MVC這些我之前看起來很高階的特性單獨寫部落格記錄。 本部落格是學習路線的第一步,是對Spring官方文件的記錄。主要是熟悉Spring框架有哪些功能,基本的使用方式是怎樣的。由於Spring FrameWork的官方文件比較長,所以分模組來記錄了,本部落格是Spring FrameWork核心技術部分的記錄,基於5.2.6版本.關於這個版本相對於之前版本的[更新](https://github.com/spring-projects/spring-framework/wiki/What's-New-in-Spring-Framework-5.x),請點選連線檢視。 --------------------------------------- ## 簡介 Spring是一個輕量級的Java Bean容器,這個容器為應用程式的開發提供了基礎框架(基礎功能)的支援,讓開發人員能夠關注業務邏輯的開發,大大了提升開發效率。Spring提供的基礎功能非常廣泛,包括核心的IOC、AOP、資源訪問、國際化、資料繫結和SpEL表示式,還有對Web的支援(Spring MVC),各種資料庫的支援(spring-data),以及對各種第三方框架整合的支援(spring-Integration)(jms、定時任務、郵件等)。 > The Spring Framework is a Java platform that provides comprehensive infrastructure support for developing Java applications. Spring handles the infrastructure so you can focus on your application. 但是傳統的Spring應用開發有個弊端,就是配置過於繁瑣。為了簡化Spring應用程式的開發,現在Spring團隊推出了Spring Boot專案,支援自動配置,內嵌Web容器等核心功能,可以大大簡化Spring應用的開發。SpringBoot因此也越來越流行。對於越來越流行的微服務,Spring也提供了Spring Cloud解決方案。 **本部落格覆蓋了Spring最重要的功能IOC和AOP。**首先介紹IOC功能,講完IOC後會詳細講解AOP。Spring框架有它自己的AOP實現,基本已經能夠解決企業開發中對AOP80%的需求。另外,Spring也提供了和AspectJ整合的功能。如果Spring的AOP實現不能滿足你的需求,可以考慮使用AspectJ。 ## 依賴注入和控制反轉概念 使用Spring必然會接觸到這兩個概念。 - 控制反轉:物件建立的控制權由應用程式轉移到Spring容器。舉個例子:以前新建一個物件我們要在應用程式主動new一個物件,並給物件的屬性賦值,使用Spring的情況:容器負責物件的建立管理。 - 依賴注入:所謂依賴注入,即元件之間的依賴關係由容器在執行期決定,形象的來說,即由容器動態的將某種依賴關係注入到元件之中。如果不使用IOC容器的話,可能需要我們通過建構函式在初始化類的時候注入(Spring的官方文件解釋:一個應用程式往往是由許多類組成的,那類和類之間又會有很多依賴關係。所謂依賴注入就是說Spring在初始化管理一個類的時候會同時將這個類依賴的類注入進入(初始化)) ## Spring模組 整個Spring框架被分成許多個小的模組,每個模組負責專門的功能。 ![](https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1591597164959&di=d90c755c40fcd9337951a09b83e3a863&imgtype=0&src=http%3A%2F%2Fwww.2cto.com%2Fuploadfile%2FCollfiles%2F20160912%2F20160912092654270.png) Spring的整個IOC容器功能由spring-core, spring-beans, spring-context, springcontext-support,和spring-expression這幾個模組提供。 - spring-core, spring-beans這兩個模組實現了最基本的IOC容器功能(IOC、依賴注入)。容器的基礎介面BeanFactory就是在這兩個模組中實現的; - spring-context和spring-context-support模組提供了ApplicationContext的實現,擴充套件了基礎容器的功能; - spring-expression:提供了對錶達式語言的支援; - spring-aop和spring-aspects:提供了對面向切面的支援; - spring-instrument和spring-instrument-tomcat:Spring對Web伺服器的支援; - spring-messaging,spring-jms:對資訊體系結構和協議的支援  - spring-jdbc、spring-orm、spring-oxm、spring-tx、spring-jms:提供資料獲取方面的支援; - spring-web, spring-webmvc, spring-websocket, 和springwebmvc-portlet提供Web相關的支援; - spring-test提供測試相關支援。 ## Maven依賴 為了防止版本號混亂,Spring提供了簡便方式使用依賴 ``` java org.springframework
spring-framework-bom 5.1.3.RELEASE pom import
//在父pom中加入上面依賴後,就可以像下面這樣使用,不需要指定版本號 org.springframework spring-context org.springframework spring-web ``` ## Spring日誌 Spring中使用JCL進行日誌輸出。熟悉JCL的人知道JCL只是一個日誌門面,我們可以自己選擇日誌實現框架。JCL預設的日誌實現框架是log4j,使用起來很方便,只需要加入下面的依賴並且在classpath下面加入log4j.properties就可以了。 log4j
log4j 1.2.17
如果想使用Log4j 2.x作為日誌的實現框架,加入下面依賴,並且在classpath下加入log4j2.xml org.apache.logging.log4j log4j-core 2.6.2 org.apache.logging.log4j log4j-jcl 2.6.2 如果我們不想使用JCL作為日誌的門面,可以這樣新增依賴,這樣Spring框架中的日誌就會路由到SLF4J這個日誌門面中去了。 //使用slf4j作為日誌的門面,使用logback作為日誌的實現框架 org.slf4j
jcl-over-slf4j 1.7.21
ch.qos.logback logback-classic 1.1.7