Unit08 PPT: Spring簡(jiǎn)介 莉给、 Spring容器 宏娄、 Spring IOC

Spring和MyBatis高級(jí)應(yīng)用

Spring&MyBatis DAY01

JAVAJSD_V01SPRINGMYBATIS01DAY01_001.png
JAVAJSD_V01SPRINGMYBATIS01DAY01_003.png

Spring簡(jiǎn)介

什么是Spring

  • Spring是一個(gè)開源的輕量級(jí)的應(yīng)用開發(fā)框架问裕,其目的是用于簡(jiǎn)化企業(yè)級(jí)應(yīng)用程序開發(fā),降低侵入性孵坚;
  • Spring提供的IOC和AOP功能,可以將組件的耦合度降至最低粮宛,即解耦窥淆,便于系統(tǒng)日后的維護(hù)和升級(jí);
  • Spring為系統(tǒng)提供了一個(gè)整體的解決方案,開發(fā)者可以利用它本身提供的功能外巍杈,也可以與第三方框架和技術(shù)整合應(yīng)用忧饭,可以自由選擇采用哪種技術(shù)進(jìn)行開發(fā)。

為什么要用Spring筷畦?
Spring的本質(zhì)是管理軟件中的對(duì)象词裤,即創(chuàng)建對(duì)象和維護(hù)對(duì)象之間的關(guān)系

Spring的主要功能

JAVAJSD_V01SPRINGMYBATIS01DAY01_006.png
JAVAJSD_V01SPRINGMYBATIS01DAY01_007.png

簡(jiǎn)介

Spring容器簡(jiǎn)介

  • 在Spring中,任何的Java類和JavaBean都被當(dāng)成Bean處理鳖宾,這些Bean通過容器管理和使用吼砂。
  • Spring容器實(shí)現(xiàn)了IOC和AOP機(jī)制,這些機(jī)制可以簡(jiǎn)化Bean對(duì)象創(chuàng)建和Bean對(duì)象之間的解耦;
  • Spring容器有BeanFactory和ApplicationContext兩種類型;

什么是JavaBean:一種簡(jiǎn)單規(guī)范的Java對(duì)象

何時(shí)使用Spring鼎文?
當(dāng)需要管理JavaBean對(duì)象時(shí)候就可以使用渔肩,Spring是最簡(jiǎn)潔
的對(duì)象管理方案之一.

如何創(chuàng)建對(duì)象 如何管理對(duì)象之間關(guān)系

Spring容器的實(shí)例化&如何創(chuàng)建對(duì)象

  • ApplicationContext繼承自BeanFactory接口,擁有更多的企業(yè)級(jí)方法,推薦使用該類型拇惋,實(shí)例化方法如下:

      //加載工程classpath下的配置文件實(shí)例化
      String conf = "applicationContext.xml";
      ApplicationContext ac = new ClassPathXmlApplicationContext(conf);
    

ClassPath是指WEB-INF目錄下的classes文件夾

如何使用Spring赖瞒?遵循Spring定義的規(guī)則,基于配置和默認(rèn)規(guī)則蚤假,減少了代碼的書寫

Spring容器的使用

  • 從本質(zhì)上講,BeanFactory和ApplicationContext僅僅只是一個(gè)維護(hù)Bean定義以及相互依賴關(guān)系的高級(jí)工廠接口。通過BeanFactory和ApplicationContext我們可以訪問bean定義吧兔。
  • 首先在容器配置文件applicationContext.xml中添加Bean定義
    <bean id=“標(biāo)示符” class="Bean類型"/>

  • 然后在創(chuàng)建BeanFactory和ApplicationContext容器對(duì)象后磷仰,調(diào)用getBean()方法獲取Bean的實(shí)例即可

          getBean("標(biāo)示符")
    

課堂練習(xí)

實(shí)例化Spring容器

使用ApplicationContext的方式實(shí)例化Spring容器

容器對(duì)Bean的管理

Bean的實(shí)例化

  • Spring容器創(chuàng)建Bean對(duì)象的方法有以下3種

    • 用構(gòu)造器來實(shí)例化 重點(diǎn)
    • 使用靜態(tài)工廠方法實(shí)例化 了解
    • 使用實(shí)例工廠方法實(shí)例化 了解

    將對(duì)象創(chuàng)建規(guī)則告訴Spring,Spring會(huì)幫你去創(chuàng)建對(duì)象;
    基于配置和默認(rèn)規(guī)則,減少了代碼的書寫!

Bean的實(shí)例化

  • 用構(gòu)造器來實(shí)例化

      <bean id="" class="java.util.GregorianCalendat"/>
    
      <bean name="calendarObj2" class="java.util.GregorianCalendar"/>
    

id或name屬性用于指定Bean名稱,用于從Spring中查找這個(gè)Bean對(duì)象

class用于指定Bean類型境蔼,會(huì)自動(dòng)調(diào)用無參數(shù)構(gòu)造器創(chuàng)建對(duì)象

  • 使用靜態(tài)工廠方法實(shí)例化

      <bean id="calendarObj2" class="java.util.Calendar" factory-method="getInstance"/>
    

    id屬性用于指定Bean名稱灶平;
    class屬性用于指定工廠類型;
    factory-method屬性用于指定工廠中創(chuàng)建Bean對(duì)象的方法箍土,必須用static修飾的方法逢享。

  • 使用實(shí)例工廠方法實(shí)例化

2017-12-12 20-00-34屏幕截圖.png
id用于指定Bean名稱;
factory-bean屬性用于指定工廠Bean對(duì)象吴藻;
factory-method屬性用于指定工廠中創(chuàng)建Bean對(duì)象的方法

課堂練習(xí)

使用Spring容器創(chuàng)建bean

演示如何使用Spring容器創(chuàng)建bean.

Bean的命名 了解

  • Bean的名稱

    • 在Spring容器中瞒爬,每個(gè)Bean都需要有名字(即標(biāo)示符),該名字可以用<bean>元素的id或name屬性指定
  • Bean的別名

    為已定義好的Bean,再增加另外一個(gè)名字引用,可以<alias>指定

      <alias name="fromName" alias="toName"/>
    

Bean的作用域

  • Spring容器在實(shí)例化Bean時(shí)沟堡,可以創(chuàng)建以下作用域的Bean對(duì)象
作用域 描述
singleton 在每個(gè)Spring IoC容器中一個(gè)bean定義對(duì)應(yīng)一個(gè)對(duì)象實(shí)例侧但,默認(rèn)項(xiàng)
prototype 一個(gè)bean定義對(duì)應(yīng)多個(gè)對(duì)象實(shí)例
request 在一次HTTP請(qǐng)求中,一個(gè)bean定義對(duì)應(yīng)一個(gè)實(shí)例航罗,僅限于Web環(huán)境
session 在一個(gè)HTTP Session中禀横,一個(gè)bean定義對(duì)應(yīng)一個(gè)實(shí)例,僅限于Web環(huán)境
global Session 在一個(gè)全局的HTTP Session中粥血,一個(gè)bean定義對(duì)應(yīng)一個(gè)實(shí)例;僅在基于portlet的Web應(yīng)用中才有意義柏锄,Portlet規(guī)范定義了全局Session的概念

上面的Bean作用域酿箭,可以通過<bean>定義的scope屬性指定

Bean的生命周期回調(diào)

  • 指定初始化回調(diào)方法

      <bean id="exampleBean" class="com.foo.ExampleBean" init-method="init">
      </bean>
    
  • 指定銷毀回調(diào)方法,僅適用于singleton模式的bean

      <bean id="exampleBean" class="com.foo.ExampleBean" destroy-method="destroy">
      </bean>
    

提示:指定銷毀回調(diào)方法趾娃,僅適用于singlton模式的bean

Spring會(huì)管理對(duì)象的創(chuàng)建過程
  • 在頂級(jí)的<beans/>元素的default-init-method屬性缭嫡,可以為容器所有<bean>指定初始化回調(diào)方法

      <beans default-init-method="init">
          <bean id="exampleBean" class="com.foo.ExampleBean"/>
      </beans>
    
  • 在頂級(jí)的<beans/>元素中的default-destroy-method屬性,可以為容器所有<bean>指示銷毀回調(diào)方法

      <beans defaule-destory-method="sestroy">
          <bean id="exampleBean" class="com.foo.ExampleBean"/>
      </beans>
    

Bean延遲實(shí)例化

  • 在ApplicationContext實(shí)現(xiàn)的默認(rèn)行為就是在啟動(dòng)時(shí)將所有singleton bean提前進(jìn)行實(shí)例化

  • 如果不想讓一個(gè)singleton bean在ApplicationContext初始化時(shí)被提前實(shí)例化茫舶,可以使用<bean>元素的lazy-init="true"屬性改變

  • 一個(gè)延遲初始化bean將在第一次被用到時(shí)實(shí)例化

      <bean id="exampleBean" lazy-init="true" class=“comm.foo.ExampleBean”>
    
  • 在頂級(jí)的<beans/>元素中的default-lazy-init屬性,可以為容器所有<bean>指定延遲實(shí)例化特性

    適用于使用頻率很低的單例對(duì)象

JAVAJSD_V01SPRINGMYBATIS01DAY01_026.png

IOC簡(jiǎn)介

  • IoC全稱是Inversion of Control,被譯為控制反轉(zhuǎn);
  • IoC是指程序中對(duì)象的獲取方式發(fā)生反轉(zhuǎn)械巡,由最初的new方式創(chuàng)建,轉(zhuǎn)變?yōu)橛傻谌娇蚣軇?chuàng)建饶氏、注入(DI)讥耗,它降低了對(duì)象之間的耦合度。
  • Spring容器是采用DI方式實(shí)現(xiàn)了IOC控制疹启,IOC是Spring框架的基礎(chǔ)和核心;

  • DI全稱是Dependency Injection,被譯為依賴注入古程;

  • DI的基本原理就是將一起工作具有關(guān)系的對(duì)象,通過構(gòu)造方法參數(shù)或方法參數(shù)傳入建立關(guān)聯(lián)喊崖,因此容器的工作就是創(chuàng)建bean時(shí)注入那些依賴關(guān)系挣磨。

  • IOC是一種思想,而DI是實(shí)現(xiàn)IOC的主要技術(shù)途徑

  • DI主要有兩種注入方式荤懂,即Setter注入和構(gòu)造器注入

IOC應(yīng)用

Setter注入

  • 通過調(diào)用無參構(gòu)造器或無參static工廠方法實(shí)例化bean之后茁裙,調(diào)用該bean的setter方法,即可實(shí)現(xiàn)setter方式的注入节仿。

      public class Computer implements Serializable{
          private String mainboard;//主板
          public String getMainboard(){
              return mainboard;
          }
          public void setMainboard(String mainboard){
              this.mainboard=mainboard;
          }
          //其他代碼
      }
    
  • 在容器xml配置中晤锥,配置注入?yún)?shù)。

      <bean id="computer" class="com.tarena.bean.Computer">
          <property name="mainboard" value="技嘉"/>
          <property name="hdd" value="希捷"/>
          <property name="ram" value="金式頓"/>
      </bean>
    

構(gòu)造器注入

  • 基于構(gòu)造器的注入是通過調(diào)用帶參數(shù)的構(gòu)造器來實(shí)現(xiàn)的廊宪,容器在bean被實(shí)例化的時(shí)候矾瘾,根據(jù)參數(shù)類型執(zhí)行相應(yīng)的構(gòu)造器。

      public class MobilePhone implements Serializable{
          private String cpu;
          private String ram;
          public MobilePhone(String cpu,String ram){
              this.cpu = cpu;
              this.ram = ram;
          }
      }
    

    構(gòu)造器注入箭启,可以強(qiáng)制給bean注入某些參數(shù)壕翩,比Setter注入更嚴(yán)格

  • 按構(gòu)造參數(shù)索引指定注入

      <bean id="phone" class="com.tarena.bean.MobilePhone">
          <constructor-arg index="0" value="ARM"/>
          <constructor-arg index="1" value="2G"/>
      </bean>
    

自動(dòng)裝配 了解

  • Spring IoC容器可以自動(dòng)裝配(autowire)相互協(xié)作bean之間的關(guān)聯(lián)關(guān)系,autowire可以針對(duì)單個(gè)bean進(jìn)行設(shè)置傅寡,autowire的方便之處在于減少xml的注入配置
  • 在xml配置文件中放妈,可以在<bean/>元素中使用autowire屬性指定自動(dòng)裝配規(guī)則,一共有五種類型值
屬性值 描述
no 禁用自動(dòng)裝配赏僧,默認(rèn)值
byName 根據(jù)屬性名自動(dòng)裝配大猛。此項(xiàng)將檢查容器并根據(jù)名字查找與屬性完全一致的bean,并將其與屬性自動(dòng)裝配
byType 如果容器中存在一個(gè)與指定屬性類型相同的bean,那么將與該屬性自動(dòng)裝配
constructor 與byType的方式類似淀零,不同之處在于它應(yīng)用于構(gòu)造器參數(shù)
autodetect 通過bean類來決定是使用constructor還是byType方式進(jìn)行自動(dòng)裝配挽绩。如果發(fā)現(xiàn)默認(rèn)的構(gòu)造器,那么將使用byType方式
  • 配置示例

      <bean id="computer" class="com.tarena.bean.Computer">
          <property name="mainboard" value="技嘉"/>
          <property name="hdd" value="希捷"/>
          <property name="ram" value="金士頓"/>
      </bean>
      <bean id="phone" class="com.tarena.bean.MobilePhoe">
          <constructor-arg index="0" value="ARM">
          <constructor-arg index="1" value="2G">
      </bean>
      <bean id="student" class="com.tarena.bean.Student"
          autowire="byType"> 
      </bean>
    
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末驾中,一起剝皮案震驚了整個(gè)濱河市唉堪,隨后出現(xiàn)的幾起案子模聋,更是在濱河造成了極大的恐慌,老刑警劉巖唠亚,帶你破解...
    沈念sama閱讀 222,000評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件链方,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡灶搜,警方通過查閱死者的電腦和手機(jī)祟蚀,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,745評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來割卖,“玉大人前酿,你說我怎么就攤上這事∨羲荩” “怎么了罢维?”我有些...
    開封第一講書人閱讀 168,561評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)丙挽。 經(jīng)常有香客問我肺孵,道長(zhǎng),這世上最難降的妖魔是什么颜阐? 我笑而不...
    開封第一講書人閱讀 59,782評(píng)論 1 298
  • 正文 為了忘掉前任平窘,我火速辦了婚禮,結(jié)果婚禮上凳怨,老公的妹妹穿的比我還像新娘初婆。我一直安慰自己,他們只是感情好猿棉,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,798評(píng)論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著屑咳,像睡著了一般萨赁。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上兆龙,一...
    開封第一講書人閱讀 52,394評(píng)論 1 310
  • 那天杖爽,我揣著相機(jī)與錄音,去河邊找鬼紫皇。 笑死慰安,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的聪铺。 我是一名探鬼主播化焕,決...
    沈念sama閱讀 40,952評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼铃剔!你這毒婦竟也來了撒桨?” 一聲冷哼從身側(cè)響起查刻,我...
    開封第一講書人閱讀 39,852評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎凤类,沒想到半個(gè)月后穗泵,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,409評(píng)論 1 318
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡谜疤,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,483評(píng)論 3 341
  • 正文 我和宋清朗相戀三年佃延,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片夷磕。...
    茶點(diǎn)故事閱讀 40,615評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡履肃,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出企锌,到底是詐尸還是另有隱情榆浓,我是刑警寧澤,帶...
    沈念sama閱讀 36,303評(píng)論 5 350
  • 正文 年R本政府宣布撕攒,位于F島的核電站陡鹃,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏抖坪。R本人自食惡果不足惜萍鲸,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,979評(píng)論 3 334
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望擦俐。 院中可真熱鬧脊阴,春花似錦、人聲如沸蚯瞧。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,470評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)埋合。三九已至备徐,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間甚颂,已是汗流浹背蜜猾。 一陣腳步聲響...
    開封第一講書人閱讀 33,571評(píng)論 1 272
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留振诬,地道東北人蹭睡。 一個(gè)月前我還...
    沈念sama閱讀 49,041評(píng)論 3 377
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像赶么,于是被迫代替她去往敵國(guó)和親肩豁。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,630評(píng)論 2 359

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

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn)蓖救,斷路器洪规,智...
    卡卡羅2017閱讀 134,704評(píng)論 18 139
  • 文章作者:Tyan博客:noahsnail.com 3.4 Dependencies A typical ente...
    SnailTyan閱讀 4,172評(píng)論 2 7
  • Spring Boot 參考指南 介紹 轉(zhuǎn)載自:https://www.gitbook.com/book/qbgb...
    毛宇鵬閱讀 46,859評(píng)論 6 342
  • 寫在前面:我是直接通過閱讀Spring源碼并參考《Spring技術(shù)內(nèi)幕(第2版)》一書來對(duì)Spring核心設(shè)計(jì)思想...
    EakonZhao閱讀 3,215評(píng)論 2 12
  • 在完成了上篇 “飛翔的小鳥”簡(jiǎn)易款 之后,就試著在網(wǎng)上找了一套UI做了一套升級(jí)款“游曳的小藍(lán)”循捺。 先關(guān)閉音效斩例,看一...
    minjing_lin閱讀 546評(píng)論 2 3