Spring入門

image-20210928140431963

一、概念

  • 維基百科:

    Spring框架是 Java平臺(tái)的一個(gè)開源的全棧應(yīng)用程序框架和==控制反轉(zhuǎn)容器==實(shí)現(xiàn),一般被直接稱為 Spring血公。該框架的一些核心功能理論上可用于任何 Java 應(yīng)用谤绳,但 Spring 還為基于Java企業(yè)版平臺(tái)構(gòu)建的 Web 應(yīng)用提供了大量的拓展支持膝舅。Spring 沒有直接實(shí)現(xiàn)任何的編程模型驰坊,但它已經(jīng)在 Java 社區(qū)中廣為流行匾二,基本上完全代替了企業(yè)級(jí)JavaBeans(EJB)模型哮独。

  • 官網(wǎng):Spring Framework

  • 特點(diǎn):==控制反轉(zhuǎn)(IOC)==拳芙,==面向切面編程(AOP)==

  • image-20211018202332014

組成 Spring 框架的每個(gè)模塊(或組件)都可以單獨(dú)存在,或者與其他一個(gè)或多個(gè)模塊聯(lián)合實(shí)現(xiàn)皮璧。每個(gè)模塊的功能如下:

  • 核心容器:核心容器提供 Spring 框架的基本功能舟扎。核心容器的主要組件是 BeanFactory,它是工廠模式的實(shí)現(xiàn)悴务。BeanFactory 使用控制反轉(zhuǎn)(IOC) 模式將應(yīng)用程序的配置和依賴性規(guī)范與實(shí)際的應(yīng)用程序代碼分開睹限。
  • Spring 上下文:Spring 上下文是一個(gè)配置文件譬猫,向 Spring 框架提供上下文信息。Spring 上下文包括企業(yè)服務(wù)羡疗,例如 JNDI染服、EJB、電子郵件叨恨、國(guó)際化柳刮、校驗(yàn)和調(diào)度功能。
  • Spring AOP:通過(guò)配置管理特性痒钝,Spring AOP 模塊直接將面向切面的編程功能 , 集成到了 Spring 框架中秉颗。所以,可以很容易地使 Spring 框架管理任何支持 AOP的對(duì)象送矩。Spring AOP 模塊為基于 Spring 的應(yīng)用程序中的對(duì)象提供了事務(wù)管理服務(wù)蚕甥。通過(guò)使用 Spring AOP,不用依賴組件栋荸,就可以將聲明性事務(wù)管理集成到應(yīng)用程序中菇怀。
  • Spring DAO:JDBC DAO 抽象層提供了有意義的異常層次結(jié)構(gòu),可用該結(jié)構(gòu)來(lái)管理異常處理和不同數(shù)據(jù)庫(kù)供應(yīng)商拋出的錯(cuò)誤消息晌块。異常層次結(jié)構(gòu)簡(jiǎn)化了錯(cuò)誤處理敏释,并且極大地降低了需要編寫的異常代碼數(shù)量(例如打開和關(guān)閉連接)。Spring DAO 的面向 JDBC 的異常遵從通用的 DAO 異常層次結(jié)構(gòu)摸袁。
  • Spring ORM:Spring 框架插入了若干個(gè) ORM 框架钥顽,從而提供了 ORM 的對(duì)象關(guān)系工具,其中包括 JDO靠汁、Hibernate 和 iBatis SQL Map蜂大。所有這些都遵從 Spring 的通用事務(wù)和 DAO 異常層次結(jié)構(gòu)。
  • Spring Web 模塊:Web 上下文模塊建立在應(yīng)用程序上下文模塊之上蝶怔,為基于 Web 的應(yīng)用程序提供了上下文奶浦。所以,Spring 框架支持與 Jakarta Struts 的集成踢星。Web 模塊還簡(jiǎn)化了處理多部分請(qǐng)求以及將請(qǐng)求參數(shù)綁定到域?qū)ο蟮墓ぷ鳌?/li>
  • Spring MVC 框架:MVC 框架是一個(gè)全功能的構(gòu)建 Web 應(yīng)用程序的 MVC 實(shí)現(xiàn)澳叉。通過(guò)策略接口,MVC 框架變成為高度可配置的沐悦,MVC 容納了大量視圖技術(shù)成洗,其中包括 JSP、Velocity藏否、Tiles瓶殃、iText 和 POI。

拓展

Spring Boot與Spring Cloud

  • Spring Boot 是 Spring 的一套快速配置腳手架副签,可以基于Spring Boot 快速開發(fā)單個(gè)微服務(wù);
  • Spring Cloud是基于Spring Boot實(shí)現(xiàn)的遥椿;
  • Spring Boot專注于快速基矮、方便集成的單個(gè)微服務(wù)個(gè)體,Spring Cloud關(guān)注全局的服務(wù)治理框架冠场;
  • Spring Boot使用了約束優(yōu)于配置的理念家浇,很多集成方案已經(jīng)幫你選擇好了,能不配置就不配置 , Spring Cloud很大的一部分是基于Spring Boot來(lái)實(shí)現(xiàn)碴裙,Spring Boot可以離開Spring Cloud獨(dú)立使用開發(fā)項(xiàng)目蓝谨,但是Spring Cloud離不開Spring Boot,屬于依賴的關(guān)系青团。
  • SpringBoot在SpringClound中起到了承上啟下的作用譬巫,如果你要學(xué)習(xí)SpringCloud必須要學(xué)習(xí)SpringBoot。

二督笆、配置

1芦昔、依賴

<!-- https://mvnrepository.com/artifact/org.springframework/spring-webmvc -->
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-webmvc</artifactId>
    <version>5.3.10</version>
</dependency>

<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-beans</artifactId>
    <version>5.3.10</version>
</dependency>

2、xml配置

<?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
        https://www.springframework.org/schema/beans/spring-beans.xsd">

</beans>

三娃肿、IOC理論

1咕缎、官方文檔

image-20211021100235155
https://docs.spring.io/spring-framework/docs/current/reference/html/core.html#beans


IOC也稱為依賴注入(DI)。它是一個(gè)過(guò)程料扰,它對(duì)象僅通過(guò)構(gòu)造函數(shù)參數(shù)定義它們的依賴關(guān)系(即凭豪,他們使用的另一個(gè)對(duì)象),從構(gòu)造函數(shù)參數(shù)晒杈,工廠方法中的參數(shù)嫂伞,或在從工廠方法中構(gòu)造或返回對(duì)象實(shí)例上設(shè)置的屬性。然后拯钻,容器在創(chuàng)建bean時(shí)注入這些依賴性帖努。該過(guò)程基本上是Bean本身通過(guò)使用類別的直接構(gòu)造或諸如服務(wù)定位器模式的機(jī)制來(lái)控制其依賴關(guān)系的實(shí)例化或位置的反向(因此控制的名稱,控制)粪般。

2拼余、IOC本質(zhì)

控制反轉(zhuǎn)IoC(Inversion of Control),是一種設(shè)計(jì)思想亩歹,DI(依賴注入)是實(shí)現(xiàn)IoC的一種方法匙监,也有人認(rèn)為DI只是IoC的另一種說(shuō)法。沒有IoC的程序中 , 我們使用面向?qū)ο缶幊?, 對(duì)象的創(chuàng)建與對(duì)象間的依賴關(guān)系完全硬編碼在程序中小作,對(duì)象的創(chuàng)建由程序自己控制亭姥,控制反轉(zhuǎn)后將對(duì)象的創(chuàng)建轉(zhuǎn)移給第三方,個(gè)人認(rèn)為所謂控制反轉(zhuǎn)就是:獲得依賴對(duì)象的方式反轉(zhuǎn)了躲惰。

IoC是Spring框架的核心內(nèi)容致份,使用多種方式完美的實(shí)現(xiàn)了IoC,可以使用XML配置础拨,也可以使用注解氮块,新版本的Spring也可以零配置實(shí)現(xiàn)IoC。

Spring容器在初始化時(shí)先讀取配置文件诡宗,根據(jù)配置文件或元數(shù)據(jù)創(chuàng)建與組織對(duì)象存入容器中滔蝉,程序使用時(shí)再?gòu)腎oc容器中取出需要的對(duì)象

image-20211021100326423

四、helloSpring

1塔沃、代碼示例

  • Hello.java

    public class Hello {
       private String name;
    
       public String getName() {
           return name;
      }
       public void setName(String name) {
           this.name = name;
      }
    
       public void show(){
           System.out.println("Hello,"+ name );
      }
    }
    
  • beans.xml

    <?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
            https://www.springframework.org/schema/beans/spring-beans.xsd">
    
    <!--    使用spring來(lái)創(chuàng)建對(duì)象蝠引,在spring中這些都稱為bean-->
        <bean id="hello" class="com.nie.pojo.Hello">
            <property name="str" value="Spring"/>
        </bean>
    
    
    </beans>
    
  • MyTest.java

    import com.nie.pojo.Hello;
    import org.springframework.context.ApplicationContext;
    import org.springframework.context.support.ClassPathXmlApplicationContext;
    
    public class MyTest {
        public static void main(String[] args) {
            //獲取spring的上下文對(duì)象
            ApplicationContext context = new ClassPathXmlApplicationContext("beans.xml");
            //對(duì)象現(xiàn)在都在spring中管理了,要使用直接去里面取出
            Hello hello = (Hello) context.getBean("hello");
            System.out.println(hello.toString());
        }
    }
    
    

2蛀柴、總結(jié)

  • hello 對(duì)象是由Spring創(chuàng)建的
  • hello 對(duì)象的屬性是由Spring容器設(shè)置的
  • 控制 : 誰(shuí)來(lái)控制對(duì)象的創(chuàng)建 , 傳統(tǒng)應(yīng)用程序的對(duì)象是由程序本身控制創(chuàng)建的 , 使用Spring后 , 對(duì)象是由Spring來(lái)創(chuàng)建的
  • 反轉(zhuǎn) : 程序本身不創(chuàng)建對(duì)象 , 而變成被動(dòng)的接收對(duì)象
  • 依賴注入 : 就是利用set方法來(lái)進(jìn)行注入的
  • IOC是一種編程思想螃概,由主動(dòng)的編程變成被動(dòng)的接收
  • ==所謂的IoC : 對(duì)象由Spring 來(lái)創(chuàng)建 , 管理 , 裝配 !==
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市鸽疾,隨后出現(xiàn)的幾起案子吊洼,更是在濱河造成了極大的恐慌,老刑警劉巖制肮,帶你破解...
    沈念sama閱讀 221,430評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件冒窍,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡豺鼻,警方通過(guò)查閱死者的電腦和手機(jī)综液,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,406評(píng)論 3 398
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)儒飒,“玉大人谬莹,你說(shuō)我怎么就攤上這事∽耍” “怎么了届良?”我有些...
    開封第一講書人閱讀 167,834評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)圣猎。 經(jīng)常有香客問(wèn)我士葫,道長(zhǎng),這世上最難降的妖魔是什么送悔? 我笑而不...
    開封第一講書人閱讀 59,543評(píng)論 1 296
  • 正文 為了忘掉前任慢显,我火速辦了婚禮,結(jié)果婚禮上欠啤,老公的妹妹穿的比我還像新娘荚藻。我一直安慰自己,他們只是感情好洁段,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,547評(píng)論 6 397
  • 文/花漫 我一把揭開白布应狱。 她就那樣靜靜地躺著,像睡著了一般祠丝。 火紅的嫁衣襯著肌膚如雪疾呻。 梳的紋絲不亂的頭發(fā)上除嘹,一...
    開封第一講書人閱讀 52,196評(píng)論 1 308
  • 那天,我揣著相機(jī)與錄音岸蜗,去河邊找鬼尉咕。 笑死,一個(gè)胖子當(dāng)著我的面吹牛璃岳,可吹牛的內(nèi)容都是我干的年缎。 我是一名探鬼主播,決...
    沈念sama閱讀 40,776評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼铃慷,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼单芜!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起犁柜,我...
    開封第一講書人閱讀 39,671評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤洲鸠,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后赁温,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體坛怪,經(jīng)...
    沈念sama閱讀 46,221評(píng)論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,303評(píng)論 3 340
  • 正文 我和宋清朗相戀三年股囊,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了袜匿。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,444評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡稚疹,死狀恐怖居灯,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情内狗,我是刑警寧澤怪嫌,帶...
    沈念sama閱讀 36,134評(píng)論 5 350
  • 正文 年R本政府宣布,位于F島的核電站柳沙,受9級(jí)特大地震影響岩灭,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜赂鲤,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,810評(píng)論 3 333
  • 文/蒙蒙 一噪径、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧数初,春花似錦找爱、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,285評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至,卻和暖如春吮播,著一層夾襖步出監(jiān)牢的瞬間变屁,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,399評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工薄料, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留敞贡,地道東北人泵琳。 一個(gè)月前我還...
    沈念sama閱讀 48,837評(píng)論 3 376
  • 正文 我出身青樓摄职,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親获列。 傳聞我的和親對(duì)象是個(gè)殘疾皇子谷市,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,455評(píng)論 2 359

推薦閱讀更多精彩內(nèi)容

  • 第一篇本文主要介紹了Spring的基本概念以及如何快速編寫一個(gè)Spring項(xiàng)目,并讓它運(yùn)行起來(lái)击孩。 Spring 概...
    冢狐閱讀 186評(píng)論 0 0
  • Spring 是最受歡迎的企業(yè)級(jí) Java 應(yīng)用程序開發(fā)框架迫悠。數(shù)以百萬(wàn)的來(lái)自世界各地的開發(fā)人員使用 Spring ...
    LU7IN閱讀 241評(píng)論 0 1
  • 一:Spring的特點(diǎn) 1、Spring:春天巩梢;--給軟件行業(yè)帶來(lái)了春天2创泄、理念:使現(xiàn)有的技術(shù)更加實(shí)用。本身是大雜...
    筆者7閱讀 2,364評(píng)論 1 1
  • Spring 1括蝠、Spring 簡(jiǎn)介 Spring 是于 2003 年興起的一個(gè)輕量級(jí)的 Java 開發(fā)框架鞠抑,它是...
    瑾墨QAQ閱讀 606評(píng)論 0 0
  • Spring全家桶 Spring Framework核心 Spring Boot構(gòu)建項(xiàng)目,在其基礎(chǔ)上開發(fā)更容易更方...
    iuiyiyut閱讀 283評(píng)論 0 0