紙上得來終覺淺,絕知此事要躬行php
Spring框架是Java平臺的開源的全棧應用程序框架和控制反轉容器實現。html
傳統的Java web框架通常分爲兩層:Contrller-Model。前端
控制器主要經過Servlet接收與處理請求,根據不一樣的Web請求生成動態內容。模型層主要處理與數據庫的交互,接收控制器的請求,打包得到的數據返回給控制器。java
主要流程以下:web
- Web瀏覽器發送HTTP請求到服務器,被Controller(主要是Servlet)獲取並進行處理
- Controller調用核心業務邏輯——Model
- Model進行數據庫存取操做,並將結果返回給Controller
- Controller將業務邏輯處理結果交給View(一般是JSP),動態輸出HTML內容
- 動態生成的HTML內容返回到瀏覽器顯示
Spring MVC基於模型-視圖-控制器(Model-VIew-Controller, MVC)模式實現,能夠構建一個靈活和鬆耦合的Web應用程序,基於spring mvc架構的請求流程以下:spring
- 客戶端產生請求,將數據提交給服務器。
- 通過前端控制器進行分發,經過查詢處理器映射,將請求委託給應用程序的其餘組件(控制器)來執行實際的請求。
- 控制器完成邏輯處理,產生響應信息(model),打包該模型數據,並標示邏輯視圖名(用來肯定用哪一個視圖渲染輸出),將模型與視圖名返回給前端控制器。
- 前端控制器使用視圖解析器來將邏輯視圖名匹配爲一個特定的視圖實現。
- 視圖使用模型數據渲染輸出,輸出會經過響應對象傳遞給客戶端。
一站式的粘合框架,它像神奇的膠水同樣,能夠以鬆耦合的方式使各組件有機的粘合在一塊兒。數據庫
Spring MVC完成用戶請求並返回響應的過程當中調用了大量的組件,而每一個組件都有一個或多個JavaBean經過互相協調組合。爲了下降耦合度,更方便、靈活的建立Bean以及Bean之間的聯繫,Spring採用了控制反轉(Inverse of Controller,IoC)的思想,把強耦合的代碼依賴從代碼中移出去,放到統一的XML配置文件中,將程序對組件的主要控制權交給IOC容器,由IOC容器統一加載和管理,把Bean的建立、聯繫、屬性分給Bean的過程,叫依賴注入(Dependency Injection, DI),因而可知,依賴注入與控制反轉息息相關。編程
因而可知,Spring框架的核心技術思想是:控制反轉/依賴注入。核心內容是:Bean。瀏覽器
JavaBean安全
Spring官方文檔對於Bean的解釋:
In Spring, the objects that form the backbone of your application and that are managed by the Spring IoC container are called beans. A bean is an object that is instantiated, assembled, and otherwise managed by a Spring IoC container.
翻譯:
組成應用程序主幹部分並由Spring IoC容器管理的對象叫作beans。Bean是由Spring IoC容器實例化、組裝、管理的對象。
總結歸納:
Spring應用上下文
已經知道,Spring IoC容器具備對象的建立、管理等控制權,可是須要咱們本身去放入對象到容器裏,須要咱們本身決定對象之間的依賴關係,總的來講,容器只是提供了一個管理對象的空間。咱們須要經過Spring的應用上下文向容器添加代爲管理的對象。
Spring應用上下文能夠簡單的理解爲將須要Spring管理的對象放入容器的容器對象,也即,應用上下文是Spring容器的一種抽象化表述,上面代碼使用的ApplicationContext本質上就是一個維護Bean定義以及對象之間協做關係的高級接口。
Spring的核心是容器,Spring容器使用DI管理構成應用的組件。Spring自帶了多個容器實現,能夠歸爲兩種不一樣的類型。BeanFactory是最簡單的容器,提供基本的DI支持。應用上下文基於BeanFactory構建,它提供更多服務,例如解析配置文本信息等等。
IoC/DI
Spring框架中的Bean再也不是傳統上的用new的方式建立了,而是經過把Bean的管理權限統一交由一個名爲Spring IoC的容器統一管理,管理權限包括:實例化、配置和組裝beans。Spring IoC容器經過讀取配置元數據獲取須要實例化、配置、組裝的對象的信息。配置元數據信息一般以XML文件或Java註解或Java代碼表示。
代碼舉例:
接口:
public interface HelloService {
public void sayHello();
}
複製代碼
實現類:
public class HelloServiceImp implements HelloService {
public void sayHello() {
System.out.println("Hello World!");
}
}
複製代碼
前面提到能夠用三種方式配置元數據信息,這裏採用XML的方式:
helloworld.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd">
<!-- id 表示組件的名字,class表示組件類 -->
<bean id="helloService" class="com.HelloServiceImpl" />
</beans>
複製代碼
實例化一個IoC容器:
public class HelloServiceTest {
public void testHelloWorld() {
// 一、加載Spring上下文,讀取配置文件實例化一個IOC容器
ApplicationContext context = new ClassPathXmlApplicationContext("helloworld.xml");
// 二、從容器中獲取Bean
HelloService helloService = context.getBean("helloService", HelloService.class);
// 三、執行業務邏輯
helloService.sayHello();
}
}
複製代碼
能夠看到,頂層接口規定了方法,底下能夠有各類打印輸出不一樣內容的實現類。經過配置xml的方式,將實現類註冊爲一個具備特定ID的bean。在實例化容器部分,首先經過應用上下文讀取了元數據信息,獲得一個容器實例,而後獲取到一個bean,並將這個bean注入到Service,Service再執行具體方法。能夠看到,咱們的Service並不須要知道它要打印輸出的內容是什麼,只需負責它原本的任務,各部分各司其職,互不干擾但卻又互相配合。
Spring核心容器:核心容器提供 Spring 框架的基本功能。核心容器的主要組件是 BeanFactory,它是工廠模式的實現。BeanFactory 使用控制反轉 (IOC) 模式將應用程序的配置和依賴性規範與實際的應用程序代碼分開。
面向切面編程:這個模塊是Spring應用系統中開發切面的基礎。AOP能夠幫助應用對象解耦——將遍及系統的關注點(如:事務、安全等)從它們所應用的對象中解耦出來。
數據訪問與集成:此模塊抽象了大量樣板式代碼,使得數據庫代碼變得簡單明瞭。Spring ORM模塊創建再對DAO的支持之上,併爲多個ORM框架(如:Hibernate、iBATIS SQL Maps等)提供了一種構建DAO的簡便方式。
Web與遠程調用:自帶MVC框架——Spring MVC。集成RMI(Remote Method Invocation)、Hessian、Burlap、JAX-WS,自帶遠程調用框架——HTTP invoker。
測試:Spring爲使用JNDI、Servlet和Portlet編寫端元測試提供了一些列的mock對象實現。
Spring Portfolio包括多個構建於核心Spring框架之上的框架和類庫。整個Spring Portfolio幾乎爲每個領域的Java開發都提供了Spring編程模型。
Spring Boot:以Spring的視角,致力於簡化Spring自己。Spring Boot大量依賴於自動配置技術,它可以消除大部分Spring配置。
Spring Web Flow:創建於Spring MVC框架之上,爲基於流程的會話式Web應用(如購物車、嚮導等)提供了支持。
Spring Web Service:提供了契約優先的Web Service模型,服務的實現都是爲了知足服務的契約而編寫的。
Spring Security:利用Spring AOP,Spring Security爲Spring應用提供了聲明式的安全機制。
Spring Integration:爲了方便應用直接的交互,Spring Integerration提供了多種通用應用集成模式的Spring聲明式風格實現。
Spring Batch:適用於開發批處理應用,好比須要進行對數據的大量操做時。
Spring Data:無論使用的是文檔數據庫(如:MongoDB),圖數據庫(如:Neo4j),仍是傳統的關係型數據庫,Spring Data都提供了一種簡單的編程模型。
Spring Social:Spring Social更多的是關注connect而不是social,它可以幫助你經過REST API鏈接Spring應用。
Spring Mobile:是Spring MVC新的擴展模塊,用於支持移動Web應用開發。
若有錯誤之處,請多多原諒而且提出來,一塊兒進步😀
文獻參考: