Java中最強大的框架spring

2021-01-10 劉小愛

今天是劉小愛自學Java的第120天。

感謝你的觀看,謝謝你。

今天學習內容安排如下:

對ssm框架有一個了解。IoC控制反轉的xml配置管理,這也就是spring框架的核心知識點之一。DI依賴注入的實現。一、SSM框架概述

這個框架啊,估計就跟婚姻一樣,也有七年之癢之說,以前呢也有一套框架叫SSH。

久而久之之後就覺得這也不好那也不好,於是就出現了一套新的框架叫SSM。

SSM框架:SpringMVC、Spring、MybatisSSH框架:Struts2、Spring、Hibernate倒不是說SSH完全被淘汰了,但除了傳統行業,基本很少用了,我們只學SSM,不學SSH。

框架的出現其實也就可以理解成為了更好地優化經典三層架構,使其更加地強大:

①Web層

我們前面一直使用的servlet也就是Web層,直接使用servlet雖然說也行,但是會有各種各樣的問題。

所以就出現了對應的web層框架:SSH中的Strutes2、SSM框架中的SpringMVC。

我們後續要學的就是SpringMVC。

②Business業務層

也就是前面一直在說的service層,反正各種各樣的名稱,都是指業務層 。

③EIS持久層

也就是dao層、mapper層,數據持久層,操作資料庫的,無外乎就是增刪改查。

前面學過的jdbc、jdbcTemplate、mybatis都是和這層是相關的,SSH框架中的hibernate,還有後續要學的SpringDateJPA都是。

而我們今天要學的spring框架也就對應著業務層:

無論是SSM框架還是SSH框架都有Spring,足以證明其重要性。

核心點主要有三點:Ioc控制反轉、AOP面向切面編程、以及事務控制。

當然spring框架體系太龐大了,涉及到的知識體系挺多的,以後會一點點學習,也就是所謂的spring全家桶。

二、Spring配置信息

我們以前Java代碼是如何寫的?

service層和dao層都是一個接口對應一個實現類,調用時直接new一個實現類對象。

但是這樣做有一個問題:

代碼耦合度高,也就是說實現類如果發生了變化,要換成另一個,代碼要修改。

而spring框架就能解決這個問題,其實現思路無外乎就是這麼個思路:

工廠設計模式+反射 + xml配置文件

反射有一個特點:由它創建的類也好、方法也罷,亦或是屬性,都是可以動態變化的。

如何動態變化,利用配置文件將類、方法名、屬性字符串動態獲取。

1Spring核心配置文件創建

創建步驟如下圖:

在resources中new一個XML配置文件,選擇Spring Config即可。

如果是以前,需要創建一個xml文件,再去spring官網copy配置文件模板。

這是得益於idea開發工具的便利,同時也從側面說明了spring的重要性。

mybatis框架中配置文件模板不就需要我們自己去官網copy麼?

2spring配置信息說明

bean,豆、咖啡豆的意思。這涉及到一個Java名稱由來的一件軼事:

Java創始團隊中,有一名成員在爪哇島上曾喝過一種美味的咖啡。

於是就給這門計算機程式語言命名為Java,所以Java也被叫做爪哇,就是取自爪哇島。

其圖標也就是一杯熱咖啡,而Java中非常重要的對象就是這種咖啡豆,也就是bean。

而spring框架中通過<bean>標籤,就可以實現對Java對象的管理。

配置完成,那它是如何使用的呢?

三、Spring IoC快速入門

IoC全稱為Inverse of Control,控制反轉的意思,這是一種思想,能解決代碼耦合問題。

1通過spring獲取對象

①工廠設計模式

ClassPathXmlApplicationContext這一大串就是使用的工廠設計模式。

我大致說下對工廠設計模式的理解:

我們的項目是部署在伺服器上面的,一般來說伺服器基本是不會停的,為了用戶體驗需要保證一直運行。

項目運行後,我們只需要創建一次工廠對象,後續需要那個對象直接使用工廠獲取。

因為伺服器不停,對象就一直存在,所以如果對象用完了就需要釋放資源,我們前面很多時候使用close()方法關流就是這麼個道理。

而工廠對象不用釋放資源,就可以一直用它。

再次強調:這一塊的理解我並沒有專門花時間去查資料學習,只不過隨著自己不斷地學習對其有了一定的見解,不一定準確,有問題後續會補充說明。

②反射

根據類的全限定名創建Class對象,再通過newInstance()實現該類的實例化。

我上述寫的就是這麼個實現思路,利用反射實例化對象,而參數就是由配置信息確定。

至於具體是如何確定的,需要去翻spring框架的源碼,很複雜。

2依賴注入的實現

好,現在問題又來了:

spring獲取對象確實解決了高耦合的問題,但是每次都要使用工廠獲取對象太麻煩。

能不能只需獲取一個對象,其它和這個對象相關的就自動完成獲取了?

就需要使用到DI依賴注入了:

通過property子標籤,根據類中的setter方法進行依賴注入,需要使用到兩個屬性:

name:即setxxx方法中的xxx。ref:引用哪一個對象。依賴注入它有一個使用前提,就是被注入的對象中需要有set方法。

這樣能有什麼效果呢?

如果沒有依賴注入的話,需要多次spring工廠獲取對象;有了依賴注入的話,只需要一次獲取對象,其相關的對象也就完成了初始化。

最後

謝謝你的觀看。

如果可以的話,麻煩幫忙點個讚,謝謝你。

相關焦點

  • Java經典面試題Spring是什麼 Spring框架入門詳解
    ctrls+s保存,Spring框架到目前為止已經搭建完畢。配置文件中的根標籤是beans,所以配置一定要寫到beans裡面。到目前為止Sping框架就搭建完畢了。我之前講解MyBatis框架的SqlSession就是由SqlSesionFactory創建的。接下來我們看一下spring另一個特性,DI依賴注入是什麼。上面Java代碼中的username,userage都是由我手動設置的,但是這樣實在太過於麻煩,於是Spring提供了為對象屬性注入的功能。
  • web應用安全框架選型:Spring Security與Apache Shiro
    web應用安全框架選型:Spring Security與Apache Shiro一、 SpringSecurity 框架簡介Spring Security 是強大的,且容易定製的,基於Spring開發的實現認證登錄與資源授權的應用安全框架。
  • Rocket-API 2.3.2 發布,基於 spring boot 的 API 敏捷開發框架
    功能新增或修改: 遠程部署重複判斷 添加mongo對象操作函數 mapping路徑匹配修改,解決restful下路徑可能會匹配執行邏輯錯誤問題 增加配置項 駝峰轉換配置 spring.rocket-api.map-underscore-to-camel-case
  • Java SSM框架之 springMVC 框架實現用戶登錄
    >3 : springMVC 小程序創建一個 javaWEB 工程,導包(在之前 spring的 jar包的基礎上加入 spring-web,spring-webmvc 的 jar 包).編寫登陸請求的 Handler在 springmvc 配置文件裡面註冊 LoginController.java
  • getty 發布,一個完全基於 java 實現的 aio 框架
    AIO的發布使得實現一套網絡通訊框架變得相對簡單。但如果你不努力,可能也無法理解哦。3、本人對netty比較喜歡,無論是其性能還是編程思想(JBOSS提供的一個java開源網絡框架,可以說是java網絡通訊裡的一哥,極其穩定和強大的性能使得被廣泛使用)4、有了netty為何還要自己造輪子?這裡有兩個原因,其一是本人就喜歡造輪子,這是病,改不了。
  • 動力節點Java學院2021年Java學習路線圖最新出爐啦
    用於對交互過程中客戶的數據進行存儲,該板塊包括關係型資料庫和非關係型資料庫。重點學習:SQL精講、MySQL、oracle、MySQL索引實現原理及優化、JDBC這一部分學完可以通過SQL語言從資料庫中查詢數據,結合Java項目實現動態站點數據的保存。
  • 詳解Spring框架的AOP機制
    在業務流程執行過程中,Spring框架會根據業務流程要求,自動把獨立編寫的功能代碼切入到流程的合適位置。例如,在一個業務系統中,用戶登錄是基礎功能,凡是涉及到用戶的業務流程都要求用戶進行系統登錄。2、 實現AOP案例代碼在實現AOP案例之前,需要確定項目已經引入了Spring框架關於AOP功能的Jar包。下面列出的是spring-aop-5.0版本,其它版本也可以。
  • Java程式設計師必會SpringMVC框架入門 b/s架構精講0基礎也能看懂
    今天我們將演示如何手動搭建SpringMVC框架以及基本操作的介紹。SpringMVC是Spring家族的產物,也可以作為組件併入Spring中,它是一個web層框架主要用於對前臺的參數接收及處理工作,相同類型的還有struts2框架,SpringMVC使用起來要比Struts2精簡許多。先給大家介紹一下B/S架構項目的流程。
  • Spring Cache,從入門到真香
    但是網上一搜卻發現緩存的框架太多了,各有各的優勢,比如Redis、Memcached、Guava、Caffeine等等。如果我們的程序想要使用緩存,就要與這些框架耦合。聰明的架構師已經在利用接口來降低耦合了,利用面向對象的抽象和多態的特性,做到業務代碼與具體的框架分離。
  • JAVA基礎學習|JAVA中的包總結!
    Java語言類庫中幾個常用的包  1.java.lang包。
  • SpringBatch從入門到放棄002- 核心概念1
    Spring Boot的所有自動配置都包含在spring.boot.autoconfigure.jar 這個 jar 中。根據 Spring 的加載規則,自動配置的類需要 spring.factories 中引入,所以我們打開這個文件,找到 batch 相關的配置Spring Boot2 中自動配置類org.springframework.boot.autoconfigure.batch.BatchAutoConfiguration 但是我們在這個類中只看到
  • 深入揭秘Spring類型轉換-框架設計的基石
    Spring Framework是一個現代化的框架,儼然已發展成為Java開發的基石。隨著高度封裝、高度智能化的Spring Boot的普及,發現團隊內越來越少的人知道其深層次機制,哪怕只有一點點。這是讓Spirng團隊開心,但卻是讓使用的團隊比較擔憂的現象。
  • 你必須掌握的 21 個 Java 核心技術!
    這個知識點是最最基本的java開發者需要掌握的,第一個肯定是教你如何在命令行中執行java程序,但是很多人一旦把java學完了,IDE用上了,就把這個都忘了。為什麼強調要知道這個呢,知道了java最純粹的啟動方式之後,你才能在啟動出問題的時候,去分析當時啟動的目錄多少,執行命名如何,參數如何,是否有缺失等。這樣有利於你真正開發中去解決那些奇奇怪怪的可能和環境相關的問題。
  • Java 面試如何坐等 offer?
    4.final 在 java 中有什麼作用?5.java 中的 Math.round(-1.5) 等於多少?6.String 屬於基礎的數據類型嗎?7.java 中操作字符串都有哪些類?它們之間有什麼區別?
  • java新手程式設計師馬上入職了,擔心看不懂代碼,應該做哪些事情?
    近期一名網友也提到了這樣一個問題,他是一名大學畢業生,在校期間學習了一些java基礎知識,沒有任何項目經驗,剛走進社會的一個年輕人,不過讓他感到高興的事情是找到了自己喜歡的工作,並且馬上就要入職了,但是高興的同時,也有幾分擔心啊,擔心自己沒法勝任工作,擔心以後到公司看不懂代碼,另外據這個網友說spring框架他還沒有學習過,這份工作的試用期是六個月,總之他現在的心情就是高興與擔心並存
  • Spring集成RabbitMQ簡單實現RPC
    本文轉載自【微信公眾號:java進階架構師,ID:java_jiagoushi】經微信公眾號授權轉載,如需轉載與原文作者聯繫public Object convertSendAndReceive(final String routingKey, final Object message) throws AmqpException
  • Spring Boot 啟動事件和監聽器,太強大了!
    大家都知道,在 Spring 框架中事件和監聽無處不在,打通了 Spring 框架的任督二脈,事件和監聽也是 Spring 框架必學的核心知識之一。一般來說,我們很少會使用到應用程式事件,但我們也不要忘了它們的存在,比如說在 Spring 框架內部都使用了各種不同的事件來處理不同的任務。
  • 從零搭建 Spring Cloud 服務(超詳細)
    本文轉載自【微信公眾號:java進階架構師,ID:java_jiagoushi】經微信公眾號授權轉載,如需轉載與原文作者聯繫這裡會介紹很多基礎知識,直接想開始搭建微服務的可以看第二章,微服務的搭建。直接看第二章不會有什麼影響,可以先學會開車再學習車的構造的,看個人習慣來。
  • 詳解SpringCloud中RabbitMQ消息隊列原理及配置,一篇就夠!
    本文轉載自【微信公眾號:java進階架構師,ID:java_jiagoushi】經微信公眾號授權轉載,如需轉載與原文作者聯繫一、MQ用途1、同步變異步消息場景:用戶下單完成後,發送郵件和簡訊通知。rabbitmq已經被spring-boot做了整合訪問實現。spring cloud也對springboot做了整合邏輯。所以rabbitmq的依賴可以在spring cloud中直接使用。
  • javaEE開發必用的技術 ssm框架+shiro框架實現權限控制及認證
    本文將使用spring,springmvc,mybatis,shiro都是最新版本的框架+JDK1.8完成用戶登錄模塊的DEMO,該DEMO具備較完善的功能,大部分項目都要做權限控制,大部分項目的思路都可以用來參照。