真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

Spring技術(shù)內(nèi)幕:設(shè)計理念和整體架構(gòu)概述-創(chuàng)新互聯(lián)

程序員都很崇拜技術(shù)大神,很大一部分是因為他們發(fā)現(xiàn)和解決問題的能力,特別是線上出現(xiàn)緊急問題時,總是能夠快速定位和解決。

創(chuàng)新互聯(lián)是一家專業(yè)提供惠東企業(yè)網(wǎng)站建設(shè),專注與網(wǎng)站設(shè)計制作、成都網(wǎng)站設(shè)計、html5、小程序制作等業(yè)務(wù)。10年已為惠東眾多企業(yè)、政府機(jī)構(gòu)等服務(wù)。創(chuàng)新互聯(lián)專業(yè)網(wǎng)站制作公司優(yōu)惠進(jìn)行中。

一方面,他們有深厚的技術(shù)基礎(chǔ),對應(yīng)用的技術(shù)知其所以然,另一方面,在采坑的過程中不斷總結(jié),積累了很多經(jīng)驗。

相信大家都使用過Spring,有些人了解它的核心:IOC和AOP,但只是了解它們的基本概念、使用了反射和動態(tài)代理,關(guān)于如何管理對象、代理的具體實現(xiàn)了解的比較淺。

有些人使用Spring MVC,使用Spring集成數(shù)據(jù)庫、事務(wù)、消息隊列以簡化操作,但對集成的具體設(shè)計思路和實現(xiàn)了解的也比較淺。

我也這一塊也比較菜,所以,后面的一段時間會梳理和總結(jié)Spring相關(guān)的技術(shù)原理,以「Spring技術(shù)內(nèi)幕:深入解析Spring架構(gòu)與設(shè)計原理」書籍為核心,結(jié)合自己的使用經(jīng)驗和疑問,以及網(wǎng)絡(luò)上大牛的文章,來補(bǔ)足自己這方面的缺失。

這本書作者是計文柯,以Spring源代碼為依托,從宏觀上揭示了Spring的設(shè)計思路和架構(gòu)思想,從微觀上剖析了Spring各功能模塊的實現(xiàn)原理和運(yùn)行機(jī)制。一方面希望讀者能通過深入了解Spring的底層機(jī)制來更好地解決實際開發(fā)中遇到的各種難題,另一方面是希望讀者能吸收Spring設(shè)計和實現(xiàn)中的優(yōu)秀方法和思想。

全書共三部分,分別闡述了Spring的核心、組件和應(yīng)用。第一部分詳細(xì)分析了IOC容器和AOP實現(xiàn),第二部分闡述了基于Spring IOC容器和AOP的Java EE組件在Spring中的實現(xiàn),第三部分講述了一些基于Spring的典型應(yīng)用的實現(xiàn)。

本篇先對設(shè)計理念和整體架構(gòu)做個概述,從整體上看看Spring的設(shè)計目標(biāo)和架構(gòu),通過本篇,你會了解到:

  • Spring的設(shè)計目標(biāo)
  • Spring的整體架構(gòu)
  • Spring的各個子項目介紹
設(shè)計目標(biāo)

簡單來說,Spring的設(shè)計目標(biāo)是為我們提供一個一站式的輕量級應(yīng)用開發(fā)平臺,抽象了應(yīng)用開發(fā)中遇到的共性問題。

作為平臺,它考慮到了企業(yè)應(yīng)用資源的使用,比如數(shù)據(jù)的持久化、數(shù)據(jù)集成、事務(wù)處理、消息中間件、分布式式計算等高效可靠處理企業(yè)數(shù)據(jù)方法的技術(shù)抽象。

輕量級是相對于傳統(tǒng)J2EE而言的,傳統(tǒng)的J2EE開發(fā),需要依賴按照J(rèn)2EE規(guī)范實現(xiàn)的J2EE應(yīng)用服務(wù)器,設(shè)計和實現(xiàn)時,需要遵循一系列的接口標(biāo)準(zhǔn),這種開發(fā)方式耦合性高,使應(yīng)用在可測試性和部署上都有影響,對技術(shù)的理解和要求相對較高。

使用Spring進(jìn)行開發(fā),對開發(fā)人員比較輕量,可以使用POJO和JavaBean的開發(fā)方式,使應(yīng)用面向接口開發(fā),充分支持了面向?qū)ο蟮脑O(shè)計方法。通過IOC容器減少了直接耦合,通過AOP以動態(tài)和非侵入的方式增加了服務(wù)的功能,為靈活選取不同的服務(wù)實現(xiàn)提供了基礎(chǔ),這也是Spring的核心。

開發(fā)過程中的共性問題,Spring封裝成了各種組件,而且Spring通過社區(qū),形成了一個開放的生態(tài)系統(tǒng),比如Spring Security就是來源于一個社區(qū)貢獻(xiàn)Acegi.

整體架構(gòu)

從總體來看,Spring分為3層,最底層是核心層,包括IOC、AOP等核心模塊,中間層是封裝的JavaEE服務(wù)、作為中間的驅(qū)動組件,最上層是各個應(yīng)用。

下圖是Spring官網(wǎng)的一個架構(gòu)圖,介紹下其組成部分:

Spring技術(shù)內(nèi)幕:設(shè)計理念和整體架構(gòu)概述

核心容器

由spring-core、spring-beans、spring-context、spring-context-support和spring-expression模塊組成:

spring-core和spring-beans提供框架的基礎(chǔ)部分,包括IOC功能,BeanFactory是一個復(fù)雜的工廠模式的實現(xiàn),將配置和特定的依賴從實際程序邏輯中解耦。

context模塊建立在core和beans模塊的基礎(chǔ)上,增加了對國際化的支持、事件廣播、資源加載和創(chuàng)建上下文,ApplicationContext是context模塊的重點。

spring-context-support提供對常見第三個庫的支持,集成到spring上下文中,比如緩存(ehcache,guava)、通信(javamail)、調(diào)度(commonj,quartz)、模板引擎等(freemarker,velocity)。

spring-expression模塊提供了一個強(qiáng)大的表達(dá)式語言用來在運(yùn)行時查詢和操作對象圖,這種語言支持對屬性值、屬性參數(shù)、方法調(diào)用、數(shù)組內(nèi)容存儲、集合和索引、邏輯和算數(shù)操作及命名變量,并且通過名稱從spring的控制反轉(zhuǎn)容器中取回對象。

AOP和服務(wù)器工具

spring-aop模塊提供面向切面編程實現(xiàn),單獨的spring-aspects模塊提供了aspectj的集成和適用。

spring-instrument提供一些類級的工具支持和ClassLoader級的實現(xiàn),用于服務(wù)器。spring-instrument-tomcat針對tomcat的instrument實現(xiàn)。

消息組件

spring框架4包含了spring-messaging模塊,從spring集成項目中抽象出來,比如Messge、MessageChannel、MessageHandler及其他用來提供基于消息的基礎(chǔ)服務(wù)。

數(shù)據(jù)訪問/集成

數(shù)據(jù)訪問和集成層由JDBC、ORM、OXM、JMS和事務(wù)模塊組成。

spring-jdbc模塊提供了不需要編寫冗長的JDBC代碼和解析數(shù)據(jù)庫廠商特有的錯誤代碼的JDBC抽象出。

spring-tx模塊提供可編程和聲明式事務(wù)管理。

spring-orm模塊提供了領(lǐng)先的對象關(guān)系映射API集成層,如JPA、Hibernate等。

spring-oxm模塊提供抽象層用于支持Object/XML maping的實現(xiàn),如JAXB、XStream等。

spring-jms模塊包含生產(chǎn)和消費消息的功能,從Spring4.1開始提供集成spring-messaging模塊。

Web

Web層包含spring-web、spirng-webmvc、spring-websocket和spring-webmvc-portlet模塊組成。

spring-web模塊提供了基本的面向web開發(fā)的集成功能,例如多文件上傳、使用servert listeners和web開發(fā)應(yīng)用程序上下文初始化IOC容器。也包含HTTP客戶端以及spring遠(yuǎn)程訪問的支持的web相關(guān)部分。

spring-webmvc包含spring的model-view-controller和REST web services 實現(xiàn)的Web應(yīng)用程序。

spring-webmvc-portlet模塊提供了MVC模式的portlet實現(xiàn),protlet與Servlet的大區(qū)別是請求的處理分為action和render階段,在一個請求中,action階段只執(zhí)行一次,但render階段可能由于用戶的瀏覽器操作而被執(zhí)行多次。

測試

spring-test模塊支持通過組合Junit或TestNG來進(jìn)行單元測試和集成測試,提供了連續(xù)的加載ApplicationContext并且緩存這些上下文。

各個子項目介紹

從配置到安全,從web應(yīng)用到大數(shù)據(jù)——無論您的應(yīng)用程序需要什么樣的基礎(chǔ)設(shè)施,都有一個Spring項目來幫助您構(gòu)建它,Spring是模塊化的設(shè)計。

Spring Boot

簡化新Spring應(yīng)用的初始搭建以及開發(fā)過程,使用特定的方式進(jìn)行配置,使開發(fā)人員不再需要定義樣板化的配置,實現(xiàn)快速開發(fā)。

Spring Cloud

為分布式系統(tǒng)開發(fā)提供工具集,基于Spring Boot,為基于JVM的云應(yīng)用開發(fā)中的配置管理、服務(wù)發(fā)現(xiàn)、斷路器、智能路由、控制總線、全局鎖、決策競選、分布式會話、集群狀態(tài)管理等操作提供了一種簡單的開發(fā)方式,其下有很多子項目。

  • 分布式/版本化配置:Spring Cloud Config
  • 服務(wù)注冊和發(fā)現(xiàn):Netflix Eureka 或者 Spring Cloud Eureka(對前者的二次封裝)
  • 路由:Spring Cloud Zuul,基于 Netflix Zuul
  • service - to - service調(diào)用:Spring Cloud Feign
  • 負(fù)載均衡:Spring Cloud Ribbon 基于 Netflix Ribbon 實現(xiàn)
  • 斷路器:Spring Cloud Hystrix
  • 分布式消息傳遞:Spring Cloud Bus
Spring Cloud Data Flow

Data flow 是一個用于開發(fā)和執(zhí)行大范圍數(shù)據(jù)處理、批量運(yùn)算、持續(xù)運(yùn)算的統(tǒng)一編程模型和托管服務(wù)。

Spring Cloud Data Flow 是基于原生云對Spring XD的重新設(shè)計,項目目標(biāo)是簡化大數(shù)據(jù)應(yīng)用的開發(fā)。Spring XD的流處理和批處理模塊的重構(gòu)分別基于spring boot的stream和task/batch的微服務(wù)程序。這些程序原生的支持像 Apache YARN、Apache Mesos和Kubernetes等現(xiàn)代運(yùn)行環(huán)境,都是自動部署單元。

Spring Data

數(shù)據(jù)訪問模塊,提供了對JDBC及ORM很好的支持,隨著NOSQL和BigData的興起,出現(xiàn)了越來越多的新技術(shù),比如非關(guān)系型數(shù)據(jù)庫、MapReduce框架,為了讓spring開發(fā)者能更方便地使用這些新技術(shù),通過Spring Data,開發(fā)者可以用Spring提供的相對一致的方式訪問位于不同類型的數(shù)據(jù)存儲中的數(shù)據(jù)。

Spring技術(shù)內(nèi)幕:設(shè)計理念和整體架構(gòu)概述

Spring Integration

在企業(yè)軟件開發(fā)過程中,經(jīng)常會遇到與外部系統(tǒng)集成,Spring Integration為Spring編程模型提供了一個支持企業(yè)集成模式的擴(kuò)展,在應(yīng)用程序中提供輕量級的消息機(jī)制,通過聲明式的適配器與外部系統(tǒng)進(jìn)行集成。

Spring Integraton中有幾個基本的概念:

  • Message:帶有元數(shù)據(jù)的Java對象;
  • Channel:傳遞消息的管道;
  • Message Endpoint:消息的處理端,在處理端可以對消息進(jìn)行轉(zhuǎn)換、路由、過濾、拆分、聚合等操作;

還可以使用Channel Adapter,這是應(yīng)用程序與外界交互的地方,輸入是Inbound、輸出則是Outbound,可選的連接類型有很多,比如AMQP、JDBC、Web Services、FTP、JMS、XMPP、多種NoSQL數(shù)據(jù)庫等等。只需通過簡單的配置文件就能將所有這些東西串聯(lián)在一起,實現(xiàn)復(fù)雜的集成工作。

Spring Batch

簡化及優(yōu)化大量數(shù)據(jù)的批處理操作,支持事務(wù)、并發(fā)、流程、監(jiān)控、縱向和橫向擴(kuò)展,提供統(tǒng)一的接口管理和任務(wù)管理。

例如它提供了很多方法來讀取大型的文件(比如1GB的CSV、XML文件),在數(shù)據(jù)庫中加載或更新幾萬甚至幾十萬條記錄,如果直接select出所有記錄,以至于拖垮整個系統(tǒng),而使用了Spring Batch,框架會幫助他每次撈取一部分記錄進(jìn)行分頁,在更新時分批進(jìn)行提交。

Spring Security

一款Spring的認(rèn)證和安全工具。其前身是Acegi,目標(biāo)是為Spring應(yīng)用提供一個安全服務(wù),比如用戶認(rèn)證、授權(quán)等。

它使用Servlet規(guī)范中的Filter保護(hù)Web請求并限制URL級別的訪問,還能夠使用Spring AOP保護(hù)方法調(diào)用——借助于對象代理和使用通知,能夠確保只有具備適當(dāng)權(quán)限的用戶才能訪問安全保護(hù)的方法。

它非常靈活,能夠基于各種數(shù)據(jù)存儲來認(rèn)證用戶。它內(nèi)置了多種常見的用戶存儲場景,如內(nèi)存、關(guān)系型數(shù)據(jù)庫以及LDAP,還可以編寫并插入自定義的用戶存儲實現(xiàn)。

Spring HATEOAS

先來理解HATEOAS:大家都聽過過REST,它的定位為「分布式超媒體應(yīng)用」的架構(gòu)風(fēng)格,文中提到了HATEOAS(Hypermedia as the engine of application state)的概念,超媒體即應(yīng)用狀態(tài)引擎,即返回結(jié)果中提供鏈接,連向其他API方法,使得用戶不查文檔,也知道下一步應(yīng)該做什么。

比如獲取一篇文章,非HATEOAS的響應(yīng)例子是:

GET /posts/1 HTTP/1.1
Connection: keep-alive
Host: blog.example.com
{
    "id" : 1,
    "body" : "My first blog post",
    "postdate" : "2015-05-30T21:41:12.650Z"
}

而HATEOAS的響應(yīng)例子是:

{
    "id" : 1,
    "body" : "My first blog post",
    "postdate" : "2015-05-30T21:41:12.650Z",
    "links" : [
        {
            "rel" : "self",
            "href" : http://blog.example.com/posts/1,
            "method" : "GET"
        }
    ] 
}

為了簡化簽入或獲取超鏈接等操作,Spring HATEOAS提供了相關(guān)的支持。

Spring Rest DOCS

可以生成準(zhǔn)確可讀的RESTful Service文檔,Spring 官方文檔都是用Spring REST Docs生成的。

基于單元測試生成文檔片段,不會侵入到源碼中,所以就不會使得源碼變得越來越臃腫,支持markdown,修改一行配置代碼即可支持生成 MarkDown 語法的文檔片段。

默認(rèn)的,在構(gòu)建的時候,會首先運(yùn)行單元測試,便生成了文檔片段,然后在打包時,通過添加 asciidoctor-maven-plugin 插件即可生成最終的文檔,只要是規(guī)范的開發(fā)過程,文檔都會隨版本的每次發(fā)布而自動更新。

Spring Social

使用 Spring Social 的大好處在于它已經(jīng)提供了對主流社交網(wǎng)站的支持,只需要簡單配置即可,對于一些不太常用的社交網(wǎng)站,也可以從社區(qū)中找到相應(yīng)的組件。

Spring AMQP

基于Spring框架的AMQP消息解決方案,提供模板化的發(fā)送和接收消息的抽象層,提供基于消息驅(qū)動的POJO,使在Spring應(yīng)用中使用AMQP消息服務(wù)器變得更為簡單,SpringSource旗下的Rabbit MQ就是一個開源的基于AMQP的消息服務(wù)器。

Spring Web Flow

Spring Web Flow是Spring MVC 的擴(kuò)展,它支持開發(fā)基于流程的應(yīng)用程序。它將流程的定義與實現(xiàn)流程行為的類和視圖分離開來,具有同時處理多個HTTP請求、管理會話狀態(tài)、數(shù)據(jù)事務(wù)處理,支持AJAX來構(gòu)建豐富的客戶端體驗,并且提供對JSF的支持。

Spring LDAP

Spring LDAP是一個用于操作LDAP的Java框架。它是基于Spring的JdbcTemplate模式,能夠幫助開發(fā)人員簡化操作。

Spring Session

Spring Session提供了一套創(chuàng)建和管理Servlet HttpSession的方案。Spring Session提供了集群Session功能,默認(rèn)采用外置的Redis來存儲Session數(shù)據(jù),以此來解決Session共享的問題。

Spring Shell

Spring Shell提供交互式的Shell,可以讓你使用簡單的基于Spring的編程模型來開發(fā)命令。

Spring Kafka

spring for kafka對原生的kafka client consumer的封裝與集成。

Spring Statemachine

它的主要功能是幫助開發(fā)者簡化狀態(tài)機(jī)的開發(fā)過程,讓狀態(tài)機(jī)結(jié)構(gòu)更加層次化。

Spring IO Platform

可以認(rèn)為是一個依賴維護(hù)平臺,該平臺將相關(guān)依賴匯聚到一起,針對每個依賴,都提供了一個版本號。

主要是解決依賴版本沖突問題,在使用Spring的時候,經(jīng)常會使用到第三方庫,一般大家都是根據(jù)經(jīng)驗挑選一個版本號或挑選最新的,風(fēng)向較大,很容易沖突。

Spring IO Platform能很好地解決這些問題,我們在添加第三方依賴的時候,不需要寫版本號,它能夠自動幫我們挑選一個最優(yōu)的版本。

歡迎掃描下方二維碼,關(guān)注我的個人微信公眾號,查看更多文章 ~

Spring技術(shù)內(nèi)幕:設(shè)計理念和整體架構(gòu)概述

創(chuàng)新互聯(lián)www.cdcxhl.cn,專業(yè)提供香港、美國云服務(wù)器,動態(tài)BGP最優(yōu)骨干路由自動選擇,持續(xù)穩(wěn)定高效的網(wǎng)絡(luò)助力業(yè)務(wù)部署。公司持有工信部辦法的idc、isp許可證, 機(jī)房獨有T級流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確進(jìn)行流量調(diào)度,確保服務(wù)器高可用性。佳節(jié)活動現(xiàn)已開啟,新人活動云服務(wù)器買多久送多久。


標(biāo)題名稱:Spring技術(shù)內(nèi)幕:設(shè)計理念和整體架構(gòu)概述-創(chuàng)新互聯(lián)
網(wǎng)站路徑:http://weahome.cn/article/doidgd.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部