MVC與三層框架|Spring的基礎應用

AI敲程式碼的手套發表於2020-10-11

學習目標:

花10天時間學習SSM框架能學多少?


學習內容:

提示:這裡可以新增要學的內容
1.瞭解MVC與三層架構
2.Spring的基本應用


學習時間:

週日 :
上午8點-中午12 點
下午 3 點-下午 6 點

學習產出:

1.1 什麼是MVC ?
MVC全稱(Model View Controller)模型-檢視-控制器
MVC是一個設計模式,這個模式是讓應用程式的輸入、處理和輸出分開。使用MVC應用程式被分成三個核心部件:模型、檢視、控制器。它們各自處理自己的任務。
在這裡插入圖片描述

瞭解完MVC的工作原理,有沒有小夥伴和我感覺一樣,這裡的控制器不就有的點像我們之前學過的JAVAWEB中的Servlet嗎?沒錯,其實他們是有聯絡滴。
在這裡插入圖片描述

1.2三層架構
What——什麼是三層架構?
如下圖所示:三層分別是UI(表示層)、(BLL業務邏輯層)與DAL(資料訪問層)

Spring框架主要作用就是用於物件的管理;
Mybatis框架用於將資料庫|表 《-》java物件
Springmvc 相當於servlet

1.3 MVC與三層架構的聯絡
如圖所示即為所求啊(皮一下很開心)?

在這裡插入圖片描述

二、Spring的基本應用
在學習Spring基礎內容時我發現Spring是有很多優點的,請看下圖
在這裡插入圖片描述

2.1理解Spring
在理解Spring之前,我們要先理解幾個概念

第一個概念?
IOC(Inverse of Control 控制反轉):講人話就是我想讓原來是人來做的活交給了機器,工作物件反轉了,而這個工作具體來說就是生成物件。
注意:控制反轉是一種設計原則,”依賴注入”與“依賴查詢”是體現這個設計原則的具體方法。
還不能理解的同學看看下面這個小栗子?
Class A中用到了Class B的物件b,一般情況下,需要在A的程式碼中顯式的new一個B的物件。但是採用依賴注入技術之後,A的程式碼只需要定義一個私有的B物件,不需要直接new來獲得這個物件,而是通過相關的容器控制程式來將B物件在外部new出來並注入到A類裡的引用中。而具體獲取的方法、物件被獲取時的狀態由配置檔案(如XML)來指定。

第二個概念?
AOP(Aspect Oriented Programming 面向切面程式設計):
官方介紹:AOP能夠將那些與業務無關,卻為業務模組所共同呼叫的邏輯或責任,例如事務處理、日誌管理、許可權控制等,封裝起來,便於減少系統的重複程式碼,降低模組間的耦合度,並有利於未來的可操作性和可維護性。
個人理解叫做三文治程式設計設計,當我們要製作一個三文治時,我們分別準備麵包和火腿,面向切面程式設計思想是這種感覺。在程式設計時我把與業務邏輯無關的部分理解成三文治裡面的“麵包”,與業務邏輯有關的是三文治是的“火腿與雞蛋”。

最後一個概念?
JavaBean:JavaBean 是一種JAVA語言寫成的可重用元件。為寫成JavaBean,類必須是具體的和公共的,並且具有無引數的構造器。
簡單來說就是把你專案裡面需要重複使用的地方,我只寫一次,然後呼叫即可。

有了前面的基礎知識,那麼瞭解Spring就不成問題了。
What——那到底什麼是Spring呢?
Spring是分層的輕量級開源框架,以IoC(Inverse of Control 控制反轉)和AOP(Aspect Oriented Programming 面向切面程式設計)為核心,使用基本的JavaBean來完成以前只可能由EJB完成的工作,取代了EJB的臃腫、低效的開發模式。

注:EJB是的Enterprise Java Beans技術的簡稱

Spring對每三層都提供的技術支援,如下圖:在這裡插入圖片描述

2.2 Spring體系架構圖
在這裡插入圖片描述

2.2實操部分
瞭解完這些我們話不多說,開始程式設計,還有些知識點會穿插著程式碼,優雅的介紹。
再開始程式設計之前我們還學要準備一下jar包,來支援Spring的運作。
百度網盤連結:https://pan.baidu.com/s/1FFQs1DC6iFKj72CVDOS9aw
提取碼:guk6

jar包的指定位置示例,如下圖所示:在這裡插入圖片描述

2.3
準備好了這些我們下面開始一個小練習,做一個實驗。
實驗目的:輸出userDao say hello World !
實驗條件:需要初始化Spring容器,並載入配置檔案,然後通過Spring容器獲取userDao例項(即Java物件),最後呼叫例項中的say()方法,輸出文字。

1、 在Eclipse中,建立一個名為chapter01的Web專案,將Spring的4個基礎包以及commons-logging的JAR包複製到lib目錄中,併發布到類路徑下。
在這裡插入圖片描述

2、在src目錄下,建立一個com.itheima.ioc包,並在包中建立介面UserDao,然後在介面中定義一個say()方法。

    package com.itheima.ioc;   
     public interface UserDao {
      	public void say();       
 }

3、在com.itheima.ioc包下,建立UserDao介面的實現類UserDaoImpl,該類需要實現介面中的say()方法,並在方法中編寫一條輸出語句。

  package com.itheima.ioc;
    public class UserDaoImpl implements UserDao {
public void say() {
                     System.out.println("userDao say hello World !");
}
   }

4、核心步驟:在src目錄下,建立Spring的配置檔案applicationContext.xml,並在配置檔案中建立一個id為userDao的Bean。

  <?xml version="1.0" encoding="UTF-8"?>
        <beans xmlns="http://www.springframework.org/schema/beans"
                    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                    xsi:schemaLocation="http://www.springframework.org/schema/beans 
                    http://www.springframework.org/schema/beans/spring-beans-4.3.xsd"> 
             <bean id="userDao" class="com.itheima.ioc.UserDaoImpl" />
       </beans>

5、測試
在com.itheima.ioc包下,建立測試類TestIoC,並在類中編寫main()方法。在main()方法中,需要初始化Spring容器,並載入配置檔案,然後通過Spring容器獲取userDao例項(即Java物件),最後呼叫例項中的say()方法。

  package com.itheima.ioc;
    import org.springframework.context.ApplicationContext;
    import  org.springframework.context.support.ClassPathXmlApplicationContext;
    public class TestIoC {
           public static void main(String[] args) { 
       ApplicationContext applicationContext = 
              new ClassPathXmlApplicationContext("applicationContext.xml"); 
                  UserDao userDao = (UserDao) applicationContext.getBean("userDao");
      userDao.say();
          }
   }

實驗結果如下:在這裡插入圖片描述

2.4 實驗中關於XML與測試類可能疑惑的點

1.關於XML?
XML裡面我們實際寫的只有一行程式碼其他的配置資訊可以在我給的jar包裡面找到
地址為spring-framework-5.0.0.RELEASE\docs\spring-framework-reference\html5\index
按Ctrl+F,輸入框中輸入“<?xml ”,即可找到複製到XML檔案即可。
至於我們要寫的程式碼如下:

  <bean id="userDao" class="com.itheima.ioc.UserDaoImpl" />

解釋✨
Id : 標識該bean的名稱,通過factory.getBean(“id”)來獲得例項。
Class : 該bean的類路徑。


2.關於測試類?
ApplicationContext applicationContext =  new ClassPathXmlApplicationContext(配置檔案);

以上程式碼的含義是建立ApplicationContext介面例項

其實Spring為我們提供了兩種核心容器,分別為BeanFactory和ApplicationContext。
老師說實際開發我們是使用ApplicationContext,所以BeanFactory在此略過。

說回ApplicationContext,它由org.springframework.context.ApplicationContext介面定義,不僅包含了BeanFactory的所有功能,還新增了對國際化、資源訪問、事件傳播等方面的支援。


那如何建立ApplicationContext介面例項,有兩種方法:
1.通過ClassPathXmlApplicationContext建立
程式碼示例:

ApplicationContext applicationContext = new ClassPathXmlApplicationContext(XML檔案);

?

作用: ClassPathXmlApplicationContext會從類路徑classPath中尋找指定的XML配置檔案,找到並裝載完成ApplicationContext的例項化工作。

2.通過FileSystemXmlApplicationContext建立
程式碼示例:

ApplicationContext applicationContext = new FileSystemXmlApplicationContext(配置檔案);

?
作用:FileSystemXmlApplicationContext會從指定的檔案系統路徑(絕對路徑)中尋找指定的XML配置檔案,找到並裝載完成ApplicationContext的例項化工作。


這裡有點套娃的感覺大家不要暈了。

總結一下:
Spring 有兩個核心容器:
1.BeanFactory
2.ApplicationContext

ApplicationContext有兩種實現方法:
1.通過ClassPathXmlApplicationContext建立
2.通過FileSystemXmlApplicationContext建立

好啦今天的學習就到這結束啦,歡迎大家和我一起交流,指正。

相關文章