<input id="ohw05"></input>
  • <table id="ohw05"><menu id="ohw05"></menu></table>
  • <var id="ohw05"></var>
  • <code id="ohw05"><cite id="ohw05"></cite></code>
    <label id="ohw05"></label>
    <var id="ohw05"></var>
  • Java開發學習(一)----初識Spring及其核心概念

    一、 Spring系統架構

    1.1 系統架構圖

    • Spring Framework是Spring生態圈中最基礎的項目,是其他項目的根基。

    • Spring Framework的發展也經歷了很多版本的變更,每個版本都有相應的調整

    • Spring Framework的5版本目前沒有最新的架構圖,而最新的是4版本,所以接下來主要研究的是4的架構圖

      (1)核心層

      • Core Container:核心容器,這個模塊是Spring最核心的模塊,其他的都需要依賴該模塊

      (2)AOP層

      • AOP:面向切面編程,它依賴核心層容器,目的是在不改變原有代碼的前提下對其進行功能增強

      • Aspects:AOP是思想,Aspects是對AOP思想的具體實現

      (3)數據層

      • Data Access:數據訪問,Spring全家桶中有對數據訪問的具體實現技術

      • Data Integration:數據集成,Spring支持整合其他的數據層解決方案,比如Mybatis

      • Transactions:事務,Spring中事務管理是Spring AOP的一個具體實現

      (4)Web層

      • 具體體現在SpringMVC框架

      (5)Test層

      • Spring主要整合了Junit來完成單元測試和集成測試

    二、Spring核心概念

    在Spring核心概念這部分內容中主要包含IOC/DIIOC容器Bean,那么問題就來了,這些都是什么呢?

    2.1 目前項目中的問題

    要想解答這個問題,就需要先分析下目前咱們代碼在編寫過程中遇到的問題:

    (1)業務層需要調用數據層的方法,就需要在業務層new數據層的對象

    (2)如果數據層的實現類發生變化,那么業務層的代碼也需要跟著改變,發生變更后,都需要進行編譯打包和重部署

    (3)所以,現在代碼在編寫的過程中存在的問題是:耦合度偏高

    針對這個問題,該如何解決呢?

    我們就想,如果能把框中的內容給去掉,不就可以降低依賴了么,但是又會引入新的問題,去掉以后程序能運行么?

    答案肯定是不行,因為bookDao沒有賦值為Null,強行運行就會出空指針(NPE)異常。

    所以現在的問題就是,業務層不想new對象,運行的時候又需要這個對象,該咋辦呢?

    針對這個問題,Spring就提出了一個解決方案:

    • 使用對象時,在程序中不要主動使用new產生對象,轉換為由外部提供對象。這種實現思就是Spring的一個核心概念(IOC)

    2.2 IOC、IOC容器、Bean、DI

    1. IOC(Inversion of Control)控制反轉

    (1)什么是控制反轉呢?

    • 使用對象時,由主動new產生對象轉換為由外部提供對象,此過程中對象創建控制權由程序轉移到外部,此思想稱為控制反轉。

      • 業務層要用數據層的類對象,以前是自己new

      • 現在自己不new了,交給別人[外部]來創建對象

      • 別人[外部]就反轉控制了數據層對象的創建權

      • 這種思想就是控制反轉

      • 別人[外部]指定是什么呢?

    (2)Spring和IOC之間的關系是什么呢?

    • Spring技術對IOC思想進行了實現

    • Spring提供了一個容器,稱為IOC容器,用來充當IOC思想中的"外部"

    • IOC思想中的別人[外部]指的就是Spring的IOC容器

    (3)IOC容器的作用以及內部存放的是什么?

    • IOC容器負責對象的創建、初始化等一系列工作,其中包含了數據層和業務層的類對象

    • 被創建或被管理的對象在IOC容器中統稱為Bean

    • IOC容器中放的就是一個個的Bean對象

    (4)當IOC容器中創建好service和dao對象后,程序能正確執行么?

    • 不行,因為service運行需要依賴dao對象

    • IOC容器中雖然有service和dao對象

    • 但是service對象和dao對象沒有任何關系

    • 需要把dao對象交給service,也就是說要綁定service和dao對象之間的關系

    像這種在容器中建立對象與對象之間的綁定關系就要用到DI:

    1. DI(Dependency Injection)依賴注入

    (1)什么是依賴注入呢?

    • 在容器中建立bean與bean之間的依賴關系的整個過程,稱為依賴注入

      • 業務層要用數據層的類對象,以前是自己new

      • 現在自己不new了,靠別人[外部其實指的就是IOC容器]來給注入進來

      • 這種思想就是依賴注入

    (2)IOC容器中哪些bean之間要建立依賴關系呢?

    • 這個需要程序員根據業務需求提前建立好關系,如業務層需要依賴數據層,service就要和dao建立依賴關系

    介紹完Spring的IOC和DI的概念后,我們會發現這兩個概念的最終目標就是:充分解耦,具體實現靠:

    • 使用IOC容器管理bean(IOC)

    • 在IOC容器內將有依賴關系的bean進行關系綁定(DI)

    • 最終結果為:使用對象時不僅可以直接從IOC容器中獲取,并且獲取到的bean已經綁定了所有的依賴關系.

    2.3 核心概念小結

    (1)什么IOC/DI思想?

    • IOC:控制反轉,控制反轉的是對象的創建權

    • DI:依賴注入,綁定對象與對象之間的依賴關系

    (2)什么是IOC容器?:Spring創建了一個容器用來存放所創建的對象,這個容器就叫IOC容器

    (3)什么是Bean?:容器中所存放的一個個對象就叫Bean或Bean對象

     

     

    posted @ 2022-05-28 23:17  |舊市拾荒|  閱讀(420)  評論(1編輯  收藏  舉報
    国产美女a做受大片观看