Spring第一篇【介紹Spring、引入Spring、Spring六大模塊】

前言

前面已經學習了Struts2和Hibernate框架了。接下來學習的是Spring框架…本博文主要是引入Spring框架…java

Spring介紹

Spring誕生:web

  • 建立Spring的目的就是用來替代更加劇量級的的企業級Java技術
  • 簡化Java的開發
    • 基於POJO輕量級和最小侵入式開發
    • 經過依賴注入和麪向接口實現鬆耦合
    • 基於切面和慣例進行聲明式編程
    • 經過切面和模板減小樣板式代碼

侵入式概念

Spring是一種非侵入式的框架spring

侵入式編程

  • 對於EJB、Struts2等一些傳統的框架,一般是要實現特定的接口,繼承特定的類才能加強功能
    • 改變了java類的結構

非侵入式markdown

  • 對於Hibernate、Spring等框架,對現有的類結構沒有影響,就可以加強JavaBean的功能

鬆耦合

前面咱們在寫程序的時候,都是面向接口編程,經過DaoFactroy等方法來實現鬆耦合session

private CategoryDao categoryDao = DaoFactory.getInstance().createDao("zhongfucheng.dao.impl.CategoryDAOImpl", CategoryDao.class);

    private BookDao bookDao = DaoFactory.getInstance().createDao("zhongfucheng.dao.impl.BookDaoImpl", BookDao.class);

    private UserDao userDao = DaoFactory.getInstance().createDao("zhongfucheng.dao.impl.UserDaoImpl", UserDao.class);

    private OrderDao orderDao = DaoFactory.getInstance().createDao("zhongfucheng.dao.impl.OrderDaoImpl", OrderDao.class);

這裏寫圖片描述

DAO層和Service層經過DaoFactory來實現鬆耦合mvc

  • 若是Serivce層直接new DaoBook(),那麼DAO和Service就緊耦合了【Service層依賴牢牢依賴於Dao】

而Spring給咱們更加合適的方法來實現鬆耦合,而且更加靈活、功能更增強大!—->IOC控制反轉框架

切面編程

切面編程也就是AOP編程,其實咱們在以前也接觸過…動態代理就是一種切面編程了ide

當時咱們使用動態代理+註解的方式給Service層的方法添加權限.工具

@Override
    @permission("添加分類")
    /*添加分類*/
    public void addCategory(Category category) {
        categoryDao.addCategory(category);
    }


    /*查找分類*/
    @Override
    public void findCategory(String id) {
        categoryDao.findCategory(id);
    }

    @Override
    @permission("查找分類")
    /*查看分類*/
    public List<Category> getAllCategory() {
        return categoryDao.getAllCategory();
    }

    /*添加圖書*/
    @Override
    public void addBook(Book book) {
        bookDao.addBook(book);

    }

AOP編程能夠簡單理解成:在執行某些代碼前,執行另外的代碼

  • Struts2的攔截器也是面向切面編程【在執行Action業務方法以前執行攔截器】

Spring也爲咱們提供更好地方式來實現面向切面編程


引出Spring

咱們試着回顧一下沒學Spring的時候,是怎麼開發Web項目的

  • 1. 實體類—>class User{ }
  • 2. daoclass–> UserDao{ .. 訪問db}
  • 3. service—>class UserService{ UserDao userDao = new UserDao();}
  • 4. actionclass UserAction{UserService userService = new UserService();}

用戶訪問:

  • Tomcat->action->service->dao

咱們來思考幾個問題:

  • ①:對象建立建立可否寫死?
  • ②:對象建立細節
    • 對象數量
      • action 多個 【維護成員變量】
      • service 一個 【不須要維護公共變量】
      • dao 一個 【不須要維護公共變量】
    • 建立時間
      • action 訪問時候建立
      • service 啓動時候建立
      • dao 啓動時候建立
  • ③:對象的依賴關係
    • action 依賴 service
    • service依賴 dao

對於第一個問題和第三個問題,咱們能夠經過DaoFactory解決掉(雖然不是比較好的解決方法)

對於第二個問題,咱們要控制對象的數量和建立事件就有點麻煩了….

Spring框架經過IOC就很好地能夠解決上面的問題….

IOC控制反轉

Spring的核心思想之一:Inversion of Control , 控制反轉 IOC

那麼控制反轉是什麼意思呢???對象的建立交給外部容器完成,這個就作控制反轉。

  • Spring使用控制反轉來實現對象不用在程序中寫死
  • 控制反轉解決對象處理問題【把對象交給別人建立】

那麼對象的對象之間的依賴關係Spring是怎麼作的呢??依賴注入,dependency injection.

  • Spring使用依賴注入來實現對象之間的依賴關係
  • 在建立完對象以後,對象的關係處理就是依賴注入

上面已經說了,控制反轉是經過外部容器完成的,而Spring又爲咱們提供了這麼一個容器,咱們通常將這個容器叫作:IOC容器.

不管是建立對象、處理對象之間的依賴關係、對象建立的時間仍是對象的數量,咱們都是在Spring爲咱們提供的IOC容器上配置對象的信息就行了。

那麼使用IOC控制反轉這一思想有什麼做用呢???咱們來看看一些優秀的回答…

來自知乎:https://www.zhihu.com/question/23277575/answer/24259844

我摘取一下核心的部分:

ioc的思想最核心的地方在於,資源不禁使用資源的雙方管理,而由不使用資源的第三方管理,這能夠帶來不少好處。第一,資源集中管理,實現資源的可配置和易管理第二,下降了使用資源雙方的依賴程度,也就是咱們說的耦合度

也就是說,甲方要達成某種目的不須要直接依賴乙方,它只須要達到的目的告訴第三方機構就能夠了,好比甲方須要一雙襪子,而乙方它賣一雙襪子,它要把襪子賣出去,並不須要本身去直接找到一個賣家來完成襪子的賣出。它也只須要找第三方,告訴別人我要賣一雙襪子。這下好了,甲乙雙方進行交易活動,都不須要本身直接去找賣家,至關於程序內部開放接口,賣家由第三方做爲參數傳入。甲乙互相不依賴,並且只有在進行交易活動的時候,甲才和乙產生聯繫。反之亦然。這樣作什麼好處麼呢,甲乙能夠在對方不真實存在的狀況下獨立存在,並且保證不交易時候無聯繫,想交易的時候能夠很容易的產生聯繫。甲乙交易活動不須要雙方見面,避免了雙方的互不信任形成交易失敗的問題。由於交易由第三方來負責聯繫,並且甲乙都認爲第三方可靠。那麼交易就能很可靠很靈活的產生和進行了。這就是ioc的核心思想。生活中這種例子比比皆是,支付寶在整個淘寶體系裏就是龐大的ioc容器,交易雙方以外的第三方,提供可靠性可依賴可靈活變動交易方的資源管理中心。另外人事代理也是,僱傭機構和我的以外的第三方。
==========================update===========================

在以上的描述中,誕生了兩個專業詞彙,依賴注入和控制反轉所謂的依賴注入,則是,甲方開放接口,在它須要的時候,可以講乙方傳遞進來(注入)所謂的控制反轉,甲乙雙方不相互依賴,交易活動的進行不依賴於甲乙任何一方,整個活動的進行由第三方負責管理。

參考優秀的博文①:https://www.tianmaying.com/tutorial/spring-ioc

參考優秀的博文②:這裏寫連接內容

知乎@Intopass的回答:

  1. 不用本身組裝,拿來就用。
  2. 享受單例的好處,效率高,不浪費空間。
  3. 便於單元測試,方便切換mock組件。
  4. 便於進行AOP操做,對於使用者是透明的。
  5. 統一配置,便於修改。

Spring模塊

Spring能夠分爲6大模塊:

  • Spring Core spring的核心功能: IOC容器, 解決對象建立及依賴關係
  • Spring Web Spring對web模塊的支持。
    • 能夠與struts整合,讓struts的action建立交給spring
    • spring mvc模式
  • Spring DAO Spring 對jdbc操做的支持 【JdbcTemplate模板工具類】
  • Spring ORM spring對orm的支持:
    • 既能夠與hibernate整合,【session】
    • 也可使用spring的對hibernate操做的封裝
  • Spring AOP 切面編程
  • SpringEE spring 對javaEE其餘模塊的支持

這裏寫圖片描述

相關文章
相關標籤/搜索