1. 程式人生 > >第一章 Spring之旅

第一章 Spring之旅

一、Spring的作用

用來替代更加重量級的企業級Java技術,尤其是EJB。達到簡化java程式設計開發

二、spring的組成模組

Core

IoC container, Events, Resources, i18n, Validation, Data Binding, Type Conversion, SpEL, AOP.

Mock objects, TestContext framework, Spring MVC Test, WebTestClient.

Transactions, DAO support, JDBC, ORM, Marshalling XML.

Spring MVC, WebSocket, SockJS, STOMP messaging.

Spring WebFlux, WebClient, WebSocket.

Remoting, JMS, JCA, JMX, Email, Tasks, Scheduling, Cache.

Kotlin, Groovy, Dynamic languages.

https://img-blog.csdn.net/20180324145202193?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM2OTM3MTI1/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70

三、為降低開發的複雜性,Spring採用以下4中關鍵策略

  • 基於POJO輕量級和最小侵入性程式設計
  • 通過依賴注入和麵向介面實現鬆耦合
  • 基於切面和慣性進行宣告式程式設計
  • 通過切面和模板減少樣式程式碼

  注:POJO(Plain Ordinary Java Object)簡單的Java物件,實際就是普通JavaBeans。其中有一些屬性及其getter setter方法的類,沒有業務邏輯,有時可以作為VO(value -object)或dto(Data Transform Object)來使用.當然,如果你有一個簡單的運算屬性也是可以的,但不允許有業務方法,也不能攜帶有connection之類的方法。

 關於DI  Dependency Injection,依賴注入 和  IOC Inversion of Control,控制反轉 專案概念檢視此部落格

1、依賴注入

實際的應用都是由兩個類或者更多的類組成,類之間通過相互協作來完成特定的業務邏輯。通常每個物件負責管理與自己相互協作的物件的引用,但是這將會導致高度耦合和難以測試的程式碼;

通過依賴注入的方式,物件的依賴關係將由負責協調系統中各個物件的第三方元件在建立物件時設定。物件無需自行建立或管理他們的依賴關係;這就大大的減少了物件之間的耦合,可以注入介面的方式給物件注入不同的實現;

建立元件之間協作的行為稱為裝配。spring有多種裝配bean的形式(xml配置檔案,註解等),spring通過應用程式上下文裝載bean的定義並把他們組裝起來。spring應用程式上下文全權負責 物件的建立和組裝。

2、應用切面

依賴注入使相互協作的元件保持鬆散耦合,而aop程式設計允許你把遍佈應用各處的功能分離出來形成可重用的元件,實際中,經常會用aop來分離一些和業務邏輯無關的功能,如日誌、事務管理、安全等;

如果這些與業務邏輯混在一起,將會導致複雜的依賴關係:

而aop可以使這些服務模組化,並以宣告的方式將它們應用到它們需要影響的元件中去,使這些元件具有更高的內聚性以及更加關注自身業務完全不需要了解系統服務的複雜性;

3、通過模板消除樣板式程式碼

例如spring的JdbcTemplate

4、spring容器

在基於spring的應用中,容器生存與spring容器中,容器建立它們,裝配它們,配置它們,管理它們的整個生命週期,從生存到死亡;

容器是spring框架的核心,spring容器通過依賴注入管理構成應用的元件,它會建立構成應用元件之間的關聯;

spring自帶幾種容器的實現,可以歸為兩種不同的型別。

Bean工廠:最簡單的容器,提供基本的di支援;

應用上下文:基本Bean工廠智商構建,提供面向應用的服務

5、應用程式上下文

ClassPathXmlApplicationContext:從類路徑下的xml配置檔案中載入上下文定義;

FileSystemXmlApplicationContext:讀取檔案系統下的xml配置檔案並載入上下文定義;

XmlWebApplicationContext:讀物web應用下的配置檔案並裝載上下文定義;

6、bean生命週期

1、spring對bean進行例項化

2、spring將值和bean的引用注入進bean對應的屬性中。

3、如果bean實現了BeanNameAsare介面,spring將bean的id傳遞給setBeanName()介面方法

10、如果bean實現了DisposableBean介面,spring將呼叫它的destroy()方法。