<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          學(xué)好Spring,分三步!

          共 5257字,需瀏覽 11分鐘

           ·

          2022-05-20 10:27

          作為 Java 后端工程師,幾乎都要用到 Spring,今天這篇文章是和大家說(shuō)說(shuō)如何學(xué)好 Spring。

          在之前的一篇 Java 讀書(shū)路線的文章中,我介紹過(guò) Spring 的讀書(shū)路線:

          雖然 Spring 變化確實(shí)很快,但是,它有幾個(gè)地方,是這么多年幾乎沒(méi)發(fā)生過(guò)什么變化的。

          沒(méi)有什么變化的第一部分,就是 Spring 的設(shè)計(jì)思路。Spring 的設(shè)計(jì)思路,永遠(yuǎn)都是作為 Bean 的容器,去管理好 Bean ,這是它永恒不變的地方。

          沒(méi)有什么變化的第二部分,就是 Spring 的內(nèi)核。Spring 的 ApplicationContext 等核心 API 是沒(méi)有什么大的變化的。

          所以,咱們就應(yīng)該先從 Spring 這些不變的核心先入手。掌握住 Spring 的思想,Spring 的內(nèi)核,哪怕 Spring 本身再變化,對(duì)咱們來(lái)說(shuō),也只是一種外在的 API 變化而已。

          要達(dá)到這個(gè)目的,我會(huì)推薦大家看一本很老的書(shū)《Spring揭秘》(豆瓣 9.1分)。

          雖然這本書(shū)主要是以 Spring3 的講解為基礎(chǔ),但是,這本書(shū)對(duì)于 Spring 的編程思想講的極為透徹,是有關(guān) Spring 的書(shū)中,難得一見(jiàn)的好書(shū)。入門(mén) Spring,這是我推薦的第一本書(shū)。

          理解了 Spring 的編程思想不夠,我們需要利用這些思想,去實(shí)踐演練,加強(qiáng)我們對(duì) Spring 的理解。

          這時(shí)候,就得有本書(shū),能真正的帶我們實(shí)戰(zhàn)下Spring的各個(gè)組件——《精通Spring 4.x》(豆瓣 8.5 分)。

          現(xiàn)在 Spring 5 在逐漸進(jìn)入主流,但是 Spring 5 也只是在 Spring 4 的基礎(chǔ)上增加了一些新特性。

          理解了 Spring 的理念,用很多代碼練習(xí)練習(xí)實(shí)踐之后,我們就只需要知道 Spring 5 的一些特性就能跟上 Spring 發(fā)展的步伐了。可以看下《Spring 5 開(kāi)發(fā)大全》,這本書(shū)對(duì) Spring 5 的新特性介紹很全。

          關(guān)于 SpringBoot,由于它的易用性,它已經(jīng)邁入主流。不過(guò) SpringBoot 也只是以 Spring 為內(nèi)核的一套應(yīng)用框架而已。找本書(shū),學(xué)習(xí)它是如何通過(guò)添加一些模塊和功能,去降低大家使用 Spring 的門(mén)檻的,也就夠了。可以讀下《Spring Boot 2實(shí)戰(zhàn)之旅》。

          一、找到最核心的內(nèi)容

          學(xué)好 Spring 的第一步就是:從以上書(shū)籍或者其他書(shū)籍、資料文檔中,找到 Spring 龐大的知識(shí)體系中最核心最重要最值得學(xué)習(xí)的知識(shí)點(diǎn),抽取出來(lái)形成學(xué)習(xí)清單。

          例如,我提取的核心知識(shí)點(diǎn)是:

          1. Spring 到底是如何管理對(duì)象的

          我們使用 Spring 的時(shí)候,大部分其實(shí)都是在使用 Spring 的核心容器功能。

          Spring 的容器功能就是通過(guò) BeanFactory 和對(duì)應(yīng)的子類各種 xxxContext 去存儲(chǔ)管理對(duì)象。

          這個(gè)知識(shí)點(diǎn)是 Spring 發(fā)展至今一直沒(méi)有變化的核心知識(shí)。

          2. Spring 注入對(duì)象的方式和對(duì)應(yīng)原理

          當(dāng) Spring 成為對(duì)象容器后,它本身最重要的目的就是要去對(duì)系統(tǒng)中各種類進(jìn)行對(duì)象注入。而工作中最常見(jiàn)的問(wèn)題,就是 Spring 注入對(duì)象的各類問(wèn)題。

          也因此,廣泛了解 Spring 注入對(duì)象的各類方式,從而能更加靈活地運(yùn)用 Spring,深入理解注入對(duì)象的對(duì)應(yīng)原理,從而能順利無(wú)誤地使用 Spring,就是我們深入學(xué)習(xí) Spring 的重要目標(biāo)。

          3. Spring 是如何管理對(duì)象之間的依賴關(guān)系的

          除了使用完整對(duì)象的注入以外,工作中,我們還需要考慮對(duì)被注入對(duì)象屬性的動(dòng)態(tài)修改,可能還想要?jiǎng)討B(tài)地注冊(cè)新的 Bean 對(duì)象等等。

          而要做到這些,我們就必須去了解 Spring 是如何管理對(duì)象之間的依賴關(guān)系的。

          4. AOP 的實(shí)現(xiàn)原理以及對(duì)其的內(nèi)部使用

          AOP 在 Spring 項(xiàng)目中被廣泛用于權(quán)限、錯(cuò)誤處理以及日志追蹤等關(guān)鍵場(chǎng)景。

          尤為重要的是,Spring 項(xiàng)目中的所有相關(guān)數(shù)據(jù)庫(kù)事務(wù),也都是通過(guò) AOP 來(lái)管理和傳播的。

          所以對(duì) AOP 的學(xué)習(xí)也頗為重要。

          5. Spring 的擴(kuò)展點(diǎn)有哪些以及如何做

          很多時(shí)候,我們需要把公司的一些內(nèi)部框架和系統(tǒng)嫁接到 Spring 中。為了減少開(kāi)發(fā)成本,就要自定義一套完整的 Spring 擴(kuò)展,比如:自定義注解、自定義配置類等。

          想做到這些,就必須知道 Spring 有哪些擴(kuò)展點(diǎn),可以做什么擴(kuò)展以及怎么做擴(kuò)展。

          6. Spring MVC 的體系和重要類的作用

          哪怕現(xiàn)在大家都使用 SpringBoot 了,但是,只要我們?cè)谟?SpringBoot 的 Web 功能,其實(shí)就是在和 SpringBoot 背后內(nèi)置的 Spring MVC 打交道。

          Spring MVC 本身有一套復(fù)雜的體系,從請(qǐng)求到響應(yīng),有一套完整復(fù)雜的流程。只有了解這些流程和 Spring MVC 的體系,我們才能順暢使用 Spring MVC,去解決 Web 項(xiàng)目中各種看起來(lái)很奇怪的問(wèn)題以及作出新的擴(kuò)展功能,比如,項(xiàng)目中的國(guó)際化出現(xiàn)的各種亂碼問(wèn)題,統(tǒng)一錯(cuò)誤處理問(wèn)題等。

          7. Spring Boot 是如何自動(dòng)配置好類的

          Spring Boot 本身就是以 Spring 作為對(duì)象容器,以 Spring MVC 實(shí)現(xiàn) Web 功能的一套縫合框架。學(xué)習(xí)了 Spring 和 Spring MVC 之后,我們就理解了 Spring Boot 絕大部分功能。

          但是,Spring Boot 是如何把 Spring 中的各個(gè)組件縫合在一起的?其中重要的思想就是自動(dòng)配置。

          所以,學(xué)習(xí)了 Spring Boot 的自動(dòng)配置,我們就能從頭到尾完整的了解 Spring Boot 的整體體系結(jié)構(gòu)和相關(guān)對(duì)象管理流程。

          提取出學(xué)習(xí)內(nèi)容后,強(qiáng)烈建議大家學(xué)習(xí)中記下我們的筆記和思考,并定期復(fù)習(xí)。

          說(shuō)明一下:除了上述知識(shí)點(diǎn),有一些知識(shí)點(diǎn)我沒(méi)說(shuō),例如:Spring MVC 中我并沒(méi)有提及攔截器,也沒(méi)有提及Spring Boot 中常用的各種注解。

          之所以沒(méi)說(shuō),是因?yàn)檫@些內(nèi)容,是 Spring 必須內(nèi)容,你繞不開(kāi)他們。而我提及的這些,則是 Spring 學(xué)習(xí)中,大家經(jīng)常不知所措,也不知道要學(xué)的那些重要內(nèi)容。

          二、做一些實(shí)際練習(xí)

          學(xué)習(xí)上面知識(shí)點(diǎn)的過(guò)程中,應(yīng)該結(jié)合實(shí)際的一些場(chǎng)景,再做一些練習(xí)。這里我對(duì)應(yīng)每個(gè)知識(shí)點(diǎn)給出一些練習(xí)建議,大家可以照著做一下。

          • 寫(xiě)一個(gè)使用 AnnotationConfigApplicationContext 去獲取對(duì)象的測(cè)試用例:寫(xiě)這個(gè)測(cè)試用例的目的是,讓我們能更加清楚地理解 Spring 是如何用容器管理對(duì)象的。

          • 寫(xiě)一個(gè)能使用 FactoryBean 去產(chǎn)生一個(gè)對(duì)象的測(cè)試用例:目的是想讓大家明白,Spring 創(chuàng)建對(duì)象并不止是一種方式,大家可以多了解下其他的創(chuàng)建對(duì)象的方式,同時(shí)也多多思考。

          • 寫(xiě)一個(gè)能在 Spring 中動(dòng)態(tài)新增對(duì)象的測(cè)試用例。

          • 寫(xiě)一個(gè)能在 Spring 中動(dòng)態(tài)刪除對(duì)象的測(cè)試用例。

          • 寫(xiě)一個(gè)能在 Spring 中動(dòng)態(tài)修改Bean屬性的測(cè)試用例。

          以上的測(cè)試用例,我建議大家使用 Spring 中的相關(guān) BeanFactoryPostProcessor、BeanDefinitionRegistryPostProcessor 等內(nèi)部對(duì)象來(lái)實(shí)現(xiàn),而不是簡(jiǎn)單的從容器中獲取 Bean,然后采用反射去修改對(duì)應(yīng)的值或者對(duì)象。

          我們寫(xiě)這幾個(gè)測(cè)試用例的目的是為了讓大家對(duì) Spring 是如何管理對(duì)象以及對(duì)象依賴關(guān)系的,有更進(jìn)一步的體會(huì)。

          • 寫(xiě)一個(gè)能觀察 Bean 的生命周期的測(cè)試用例:目的是能讓大家進(jìn)一步了解 Spring 對(duì)象的管理。這個(gè)測(cè)試用例盡量寫(xiě)全,生命周期觀察的越細(xì)致越好。比如,我們不僅要實(shí)現(xiàn) init 和 destroy 方法,還要采用 BeanNameAware、InitializingBean 等方式,去盡量把完整的 Bean 生命周期展示出來(lái)。

          • 寫(xiě)一個(gè)或者幾個(gè)能用 AOP 功能的測(cè)試用例:加深對(duì) Spring AOP 的理解的,最好是把 AOP 中的前置通知、后置通知、返回通知、異常通知、環(huán)繞通知都實(shí)現(xiàn)一遍,并通過(guò)調(diào)試,把整體的 AOP 流程搞得非常清楚。

          • 寫(xiě)一套自定義注解并附上對(duì)應(yīng)的測(cè)試用例:現(xiàn)在大家都使用 SpringBoot 了,普遍采用擴(kuò)展 Spring 的方式就是自定義注解。所以,要理解 Spring 的自定義擴(kuò)展點(diǎn),就是要理解 Spring Boot 是如何做到自定義注解的。加載自定義注解,處理自定義注解,最好是通過(guò)寫(xiě)出自定義注解的測(cè)試用例,然后一步步調(diào)試觀察出整個(gè)流程來(lái)。

          • 寫(xiě)一個(gè)能手動(dòng)映射 DispatcherServlet 路徑的測(cè)試用例:在 Spring MVC 中,DispatcherServlet 是所有 web 請(qǐng)求的第一關(guān)卡,是非常核心的類。寫(xiě)關(guān)于 DispatcherServlet 的測(cè)試用例,我建議要想辦法通過(guò)編碼而不是配置去把 DispatcherServlet 相關(guān)的路徑映射等功能做出來(lái)。這對(duì)我們理解 Spring MVC 的請(qǐng)求路由,請(qǐng)求映射以及相關(guān)核心類的加載和使用都非常重要。

          • 寫(xiě)一個(gè)自定義的 HttpMessageConverter 加對(duì)應(yīng)的測(cè)試用例:自定義 HttpMessageConverter 是我們?cè)谑褂?Spring 做 web 開(kāi)發(fā)經(jīng)常要做的一件事情。通過(guò)寫(xiě)自定義的 HttpMessageConverter,以及對(duì)應(yīng)的測(cè)試用例,對(duì)我們理解請(qǐng)求是如何被轉(zhuǎn)化成 Java 對(duì)象,Java 對(duì)象又是如何轉(zhuǎn)化成我們定義的響應(yīng)內(nèi)容格式的這個(gè)關(guān)鍵流程是非常重要的。

          • 自定義一個(gè) WebDataBinder 并讓它生效:使用了 HttpMessageConverter 去轉(zhuǎn)化請(qǐng)求和響應(yīng),其中核心的一點(diǎn)是:在請(qǐng)求時(shí)如何把參數(shù)去綁定到對(duì)應(yīng)的 Java 對(duì)象上。而在綁定參數(shù)過(guò)程中,數(shù)據(jù)校驗(yàn)也經(jīng)常和 WebDataBinder 混合在一起。所以理解 WebDataBinder,能更好理解 web 請(qǐng)求到 Spring 中 Java 對(duì)象的轉(zhuǎn)化機(jī)制。

          • 畫(huà)一張從請(qǐng)求到響應(yīng)的 Spring MVC 所用到的類的流程圖:了解了 Spring MVC 中的幾個(gè)核心重要類,我們就可以把這些重要類關(guān)聯(lián)起來(lái),并結(jié)合一些 Spring MVC 中別的相關(guān)類,共同構(gòu)造出一幅完整的請(qǐng)求-響應(yīng)流程圖,從而加深我們對(duì) Spring MVC 整個(gè)體系的理解。

          • 自己實(shí)現(xiàn)一個(gè) Spring Boot Starter:對(duì)于 Spring Boot,我們本身最重要的是去理解 Spring Boot 是如何通過(guò)自動(dòng)配置,把各種 Spring 組件結(jié)合在一起的。而這種自動(dòng)配置,其實(shí)就是通過(guò)各個(gè)組件寫(xiě)自己的 Spring Boot Starter 來(lái)完成的。自己實(shí)現(xiàn)一個(gè) Spring Boot Starter, 我們就能理解到 Spring Boot 的自動(dòng)配置、自動(dòng)加載方法。

          三、通過(guò)項(xiàng)目融會(huì)貫通

          做了練習(xí)后,我們就要通過(guò)一些小項(xiàng)目,去把學(xué)到的 Spring 知識(shí)融匯貫通,串聯(lián)到一起。我推薦做兩個(gè)簡(jiǎn)單的項(xiàng)目:

          第一個(gè)項(xiàng)目是做一個(gè)簡(jiǎn)單的模擬銀行項(xiàng)目,需求如下:

          1. 可以檢查余額
          2. 可以存款
          3. 可以退款
          4. 可以看到交易流水
          5. 可以計(jì)算利率
          6. 能優(yōu)雅的退出應(yīng)用

          第二個(gè)項(xiàng)目是做一個(gè)簡(jiǎn)單的員工管理系統(tǒng),需求如下:

          1. 可以統(tǒng)計(jì)出今年的新員工有多少
          2. 輸入員工姓名的部分字,提示可能的全名
          3. 每個(gè)員工有五位的員工編號(hào)
          4. 員工有自己的部門(mén)和上級(jí)
          5. 可以顯示員工在職,離職狀態(tài)
          6. 有員工信息頁(yè)面,可以顯示員工編號(hào),姓名,部門(mén)以及狀態(tài)

          以上就是我自己總結(jié)出來(lái)的學(xué)習(xí) Spring 的方法。

          另外我還想提醒大家一句,學(xué)習(xí) Spring,是為了我們的工作服務(wù)的。所以,除了學(xué)習(xí) Spring 本身,這里,我還建議大家要經(jīng)常關(guān)注一些 Spring 的實(shí)踐問(wèn)題。把一些印象比較深的錯(cuò)誤和對(duì)應(yīng)的解決辦法匯總起來(lái),看看有沒(méi)有什么辦法能通過(guò)修改框架,增加約束,去減少這些錯(cuò)誤的發(fā)生。

          在從事技術(shù)的路上,我希望能一路分享給大家我自身的經(jīng)驗(yàn)。作為多工作了幾年、多走了一些彎路的過(guò)來(lái)人,我希望能通過(guò)分享這些學(xué)習(xí)方法,為大家撐起一把傘,陪伴著大家一路前行。

          畢竟,撐傘者也是雨中人,我們大家都只是在雨中砥礪前行而已。



          今日課程推薦

          課程:《SpringMVC4.x從入門(mén)到精通

          課程介紹:

          Spring MVC是一種Java框架,于SpringFrameWork的后續(xù)產(chǎn)品,已經(jīng)融合在Spring Web Flow里面。Spring 框架提供了構(gòu)建 Web 應(yīng)用程序的全功能 MVC 模塊。

          使用 Spring 可插入的 MVC 架構(gòu),從而在使用Spring進(jìn)行WEB開(kāi)發(fā)時(shí),可以選擇使用Spring的SpringMVC框架或集成其他MVC開(kāi)發(fā)框架,如Struts1(現(xiàn)在一般不用),Struts2(一般老項(xiàng)目使用)等。

          適宜人群

          1. 有js/servlet基礎(chǔ)的學(xué)員

          2. 有Java基礎(chǔ)的學(xué)員


          點(diǎn)擊閱讀原文立即開(kāi)始學(xué)習(xí)~
          瀏覽 19
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  卡一卡二久久 | 日本成人一级性片在线观看 | 超碰人人在线观看 | 日韩高清无码网站 | 大香蕉大香蕉欧美 |