SlideShare a Scribd company logo
作 語 術 些 這 對 針 將,中 節 章 個 這 在,措 所 知 不 往 往 語 術 等 、                A OP   IoC
、 器 容、性 入 侵 非、級 量 輕 對 面,說 來 者 學 初 的        門入算打於對
                                               Spring
                                                 。案方
的合整相們它與了供提也                ,)等
                          S pring       、 、        (
                                          H ibernate    J SF    S truts
架框種各的存現於對,外之此除,)                                   (
                                          A pplication framework
架框式程用應的位方全個一是,裝封型模的致一供提)                                       Interface
          ( 務 服 業 企 的 用 常 些 一 於 對 並,現 實 的 架 框
API A pplication                                               MVC Web
供提,援支的)                (易交、)
                T ransaction             (層久持對供提
                                       P ersistence
,式方現實的)                             ( 供提並,架框
               A spect-oriented programming      AOP
的)            (性 入 侵 非 、 器 容)
    N o intrusive                             ( 現實
                                    I nversion of Control       IoC
它,)           (器 容 的)
      C ontainer                (級 量 輕 個 是 心 核 的
                           L ightweight                           Spring
                                             認識 Spring
     1
1 2
                                。礎基的時現
實念概語術些這對   Spring   紹介,中節章個各後往為作以,紹介些一
      )   – http://openhome.cc   良信林(冊手術技   Spring 2.0
1 3
                                                       。用使接
 直中之架框或式程用應個一另到拿接直以可,件組些某中式程用應,話的
  Spring
       用使,說的單簡。)                   R eusability
                                 (性用重可的件組式程用應加增步
 一進,擔負的時植移架框從式程用應低減,在存的架框到不受感乎幾式程
 用 應 讓 望 希,架 框)        N o intrusive
                           (性 入 侵 非 個 一 現 實 是 一 之 標 目 的                       Spring
   。中之式程用應個一另於用重接直以可件組的中當說別更,來出立獨中
 架框從法無而,賴依生發架框與件組式程用應使會都,等別類些某的                                                 API
                 API
 承繼接直或, 的架框了用使量大如例,賴依了生發架框與就式程用應
 ,用 使 被 旦 一 架 框 些 有 而 然,式 程 用 應 的 需 所 下 構 架 循 依 出 發 開 的 速 快,上
 礎基的架框於基以可員人發開讓,現實的構架個一供提是意用的來原架框
                                        )            (性入侵非 N o intrusive
          。      Spring
                  用使中備設型小在以可至甚您,的小很是也擔負源資
 的要需所心核          Spring
                   用使而,小大的 到不有只上量容案檔在心核的      1MB
  S pring                    EJB
      ,的說來)器容 如(器容的級量重些一於對相是容形的級量輕
                                          )            (級量輕  L ightweight
                   。 識認的 本 基 個 有 念 概 與 語術些 這 對 您 讓 以 可 明 說
 的下以,言而者學初的                  Spring
                          門入於對,語術等)                           oriented programming
       ( 、)
  A spect-   A OP              ( 、)
                          I nversion of Control  (性入侵非
                                                    I oC     N o intrusive
 、 器 容、級 量 輕 是 像 到 觸 接 得 就 時    用使在,)      Spring(架框式程         F ramework
 用應的面方全個一為作,多越來越也語術與念概的上作實與計設在域領個各
 而 因,雜 複越 來越 用應 的 域領個 各於 式程 用應 , 日今 在於 由 , )                                 framework
  A pplication
         (架框式程用應的位方全個一為作是,一之標目的                                              Spring
                                                                1.1 術語介紹
  Spring    識認   Chapter 1
1 4
,上  Spring                  AOP
          至 映 反 注 關 的 於 對 們 人,述 描 的 當 適 件 一 是 不 並 架 框                         AOP
 是架框   Spring說,架 框 子 個 一 的 援 支           Spring
                                       是 只 架 框 而 然,現 實 的      AOP
)A spect-oriented programming      AOP
                          ( 援支是一之能功的視重人為最                                    Spring
                              )        A spect-oriented programming
                                                      (                       AOP
                                                     。念概的
Dependency Injection與       Inversion of Control
                                       紹介細詳會還,中節一下在
                                                  。件物的定指
 入注賴依將,態組據根動自會器容心核                        S pring
                                       ,定設以加中檔態組在需只
, 係 關 賴 依 的 件 物 護 維 中 碼 式 程 在 己 自 必 不,            Spring
                                            用 使。 稱 簡,」 入 注       DI
 賴依「作翻常文中,              Dependency Injection
                                     為念概心核要重個一另                              Spring
                                               。難困的離脫器容
 從式程用應成造,能功的器容於賴依式程用應免避以可,說來度角的器容
 從,合耦的間之件物免避以可,說來度角的件物從,念觀的要重是」作實
 非而象抽於賴依「、」移 轉的係關賴依「,中                              Spring
                                              在。 稱簡,」轉           IoC
 反制控「作翻常文中,               Inversion of Control
                                       是念概心核的要重最                             Spring
                               Dependency Injection
                                            與                Inversion of Control
            。好作您幫動自會都器容在現,係關件物理管以式程寫撰行
 自須必先原,式程的寫撰所 個一是就器容,說來體具度角的 從 Java                                      Java
                    。係關賴依的間之件物與件物立建是或,件物生產
 來碼式程行一何任寫撰用不,用取接直以可都件物的有所,後之器容動啟
 在,等 性 屬 的 件 物 個 某 為 成 定 設 須 必 後 之 生 產 件 物 個 哪、) 式 方                   Singleton
 或式方   P rototype
                (生產何如、稱名件物義定中當在,) 是常通(案                         XML
 檔定設態組個一用使以可您,能功器容供提                             S pring
                                           。係關賴依的間之件物
 與件物成完至甚,期週命生等毀銷、得取源資、成生的件物理管以可器容
                                              )       (器容       C ontainer
                    )   – http://openhome.cc        良信林(冊手術技             Spring 2.0
1
              。式程用應的行進所前當於用適而,合整                     與以可都             Spring
,等 、   J SF     Struts
               是 像,合 整               Spring
                              與架框 的悉熟所己自將以可也您           Web
                                           。術技面畫的者用使給
                PDF
 現展為作 用使、 合結、 用使如例,術技層 的同不用使Tiles          JSP                      View
                                         AOP      IoC
 換 抽 的 鬆 輕 以 可 至 甚 您,能 功 的 與 身 本 其 用 善 以 可 是 處 好 的 架 框
Spring Web  用使,案方決解的架框)                  (       W eb MVC
                                                 供提也          Model 2           Spring
                                                    架框                           Web
                         。案方決解的應對了供提也                ,化簡的             S pring
 上 用 使 及 合 整 的)      、   i BATIS
                               (具 工 H ibernate          O/R Mapping
                                                於 對, 能 功 理 管
)   Declarative Transaction
                    (易交式告宣與)                      P rogrammatic Transaction
                                                     (易交式
 程 編 供提 ,化 簡 與裝 封以 加用 使的                   JDBC
                                  對如 ,合 整 的 層久 持對供提                             Spring
                                                       層久持
                            。案方合整架框的                   供提望     one-stop shop
 希    S pring
         ,代替以加案方架框的它其合結以可也,立獨以可此彼能功                                               API
 的裝封或架框子些這的                   S pring
                         ,能功 與器容 的               AOP 於重依些     IoC     Spring
                           API
 有 現 實 的 們 它,裝 封 的 務 服 業 企 種 各 及 以 架 框            、層 久 持 了 現  M VC Web
 實中     Spring
           在,在所心重其是現實的能功 與能功器容 的                       AOP               IoC    Spring
                                           。除移能功誌日個這將
 ,下況情的式程何任改修不在以可也,意願您若而,中式程用應的先原至
 入 加 求 需 個 這 將 就,碼 式 程 行 一 何 任 改 修 須 無 以 可 您,求 需 的)        (               L ogging
 誌日個有式程用應設假,用應個一的                        明說來子例的際實個舉    AOP
                         。色特的注關人令個一另的                了顯突也             Spring
 但,解誤所有然雖,上架框               的它在中集注關的 AOP          於對們人得使        Spring
Spring     識認      Chapter 1
1 6
                     。會體中作實從節章
   的後往在以可您,現實的體具有都念概些這中   在,解了                  Spring
   能太不是還能可語術些這上以對面,驗經的發開人前收吸來習
   學的  Spring
        由藉望希是只,驗經的架框它其過用使有沒您果如
    。化簡為更上用使在且並,型模用使的致一有以可時用使在務服些
這讓,裝封行進務服些這對式方層象抽取採是而,作實供提接直不                             Spring
  Remoting
,等)    (程遠、)        Scheduling
                (程排、 、 如例,務服些一於對  Mail   JNDI
                        裝封的務服業企它其
             )   – http://openhome.cc   良信林(冊手術技         Spring 2.0
1 7
                                 。 係 關 賴依了 生 產 組 模 層 低 對 就
 ,式函的組模層低行執叫呼接直組模層高果如,求需式程的份備檔存個是
 組模層高而,計設取存機碟軟的關相體硬與是能可組模層低如例。組模作
 實 的層 低 於賴 依 不 而 ,性 用重 有 具該 應 它 ,組 模 的 關 相)          B usiness logic
                                                         (
 輯邏務商與是常通組模象抽的層高,時計設組模行進在,說的單簡
                                                。性用重可的
 式程用應進改而進,轉反係關賴依的良不種這將何如要又而,計設係關賴
 依 的良不 些 哪 有 去 過 看 看 ,轉反 的 係 關 賴 依 是 就 也, 解 瞭 始 開          Inversion
  Dependency            IoC
            從先可, 解瞭要,義意其解瞭易容不上面字從, 看初                        IoC
 。 」轉反 制 控 「 是 就 , 話 的來過 譯 翻 要 硬 文 中 果 如 ,       Inversion of Control
       I oC
 名全 ?思意麼什是 底到,後之炸轟字文的象抽串連一  IoC
                      IoC
      。 現 表 種 一 的 是也」 式 程 用 應 於 務 服 器容是 而 , 器 容 於 賴 依 應
                              IoC
 不 式程用 應 「 , 現 表 種 一 的 是 也 」 現 實 賴 依 象抽是 不 而 , 象 抽 賴 依 須
                        IoC
 必現 實 「 , 現 表 種 一 的 是 」 象 抽 於 賴 依 須 必 都組模 是 而 , 組 模 層 低 賴
 依該應不組模層高「是像,的說來計設式程用應的良不去過於對相是移轉
 。」移 轉 的係 關 賴依「是念概象抽的 , 是念概心核的      I oC   IoC            Spring
                1.2 控制反轉(Inversion of Control)
  Spring   識認   Chapter 1
1 8
                  }
                      }
                           writer.saveToFloppy();
                           ...
                      public void save() {
                      ....
                      private FloppyWriter writer = new FloppyWriter();
                  public class Business {
              Java
   : 例 為 式 程 以 。 」面介 象 抽 於 賴 依 是 而 ,作實 賴 依 應 不 式 程 「 為
釋解)  D ependency Inversion
                      (轉反賴依,計設來式方的向導件物以若
                                              。計設式程
用應的層高用使複重以可才樣這,象抽的組模於賴依都組模望希上計設在
。式方計設的好個一是不這,動更著跟須必也組模層高了成造,動更的體
媒存儲的組模層低於由,中子例個這在。行才改修以加須必,用重接直法
無式程用應個這則,體媒存儲為作碟磁 用使台平該而,上台平個一另       USB
                                API
至 植移式 程 用 應 將 要 天 今 設 假 。 的 組 模 層 低 於賴依 式 程 用 應 層 高 致 導
,saveToFloppy()
             了行執接直時求需存儲要需在式程用應,中 圖在                        1.1
                       作實組模層低賴依組模層高          1.1   圖
         …
         賴依生產組模層低對
              API
    式程用應致導, 的組模層低
    叫呼中 式程用應的層高在接直
                  )   – http://openhome.cc   良信林(冊手術技       Spring 2.0
Chapter 1    識認   Spring



        的際實於賴依求需的檔存,中計設的別類
    Business                                             FloppyWriter 物
      改 修 須 必 則 , 碟 磁 為 改 介 媒 存儲將 要 想 天 今 果 如 , 件
                                    USB                    Business   程的
                    。別類       用使複 重 接 直 法 無 您 , 式
                        Business

個一告宣先可如例,況情一此進改以可,告宣的面介過透果如
IDeviceWriter                   :面介
public interface IDeviceWriter {
    public void saveToDevice();
}


    於 賴 依 為 計 設 以 可,時 求 需 檔 存 到 遇 在,別 類
                 Business               的計設所著接
           :如例,
IDeviceWriter                的際實於賴依是不而,面介 FloppyWriter

public class Business {
    private IDeviceWriter writer;

    public void setDeviceWriter(IDeviceWriter writer) {
        this.writer = writer;
    }

    public void save() {
        ....
        writer.saveToDevice();
    }
}


    至存儲有天今果如,的用重以可是就別類
                     B usiness            ,下計設的樣這在
Floppy   作 實 別 分 求 需 存 儲種兩 這 對 針 要 只 , 求 需 的 碟 磁 或
          USB                                                   IDevice-
     :別類
Writer               個 一計設 存 儲 的 機 碟 軟 對 針如 例 , 可 即 面 介
                                                 FloppyWriter

public class FloppyWriter implement IDeviceWriter {
    public void saveToDevice() {
        ....
        //至存儲際實
          至存儲際實
          至存儲際實
          至存儲際實     Floppy  碼式程的
                            碼式程的
                            碼式程的
                            碼式程的
    }
}


                                                                        1
Spring 2.0   良信林(冊手術技        – http://openhome.cc   )

      對針是或      USB   個一計設存儲的碟磁         UsbDiskWriter    :別類
  public class UsbDiskWriter implement IDeviceWriter {
      public void saveToDevice() {
          ....
          //   至存儲際實
               至存儲際實
               至存儲際實
               至存儲際實  UsbDisk  碼式程的
                               碼式程的
                               碼式程的
                               碼式程的
      }
  }


      : 下 如 式 程 態 組 個 一寫撰 以 可 , 話 的 存 儲 機碟軟 要 需 式 程 用 應 果 如
  Business business = new Business();
  business.setDeviceWriter(new FloppyWriter());
  business.save();


  要需式程用應果如,的樣同                   USB   程態組個一寫撰以可,話的存儲碟磁
            :下如式
  Business business = new Business();
  business.setDeviceWriter(new UsbDiskWriter());
  business.save();

  都說來別類           於 對 ,動 變 何 如 作 實 存 儲 的 層 低 論 無 , 到 看 以 可
                                                    Business
      的單簡個一由藉,式程理管態組個一寫撰以可也您。改修何任需無                            XML
  就 ,寫撰 必 不 都 式 程 態 組 的上以 連 此 如 , 態 組 改 更 來 案 檔
      .properties                                          是或
  簡個寫如例,作實          Business的賴依所別類              換更的單簡以可
                                        IDeviceWriter
      BusinessFactory                     :                的單
  package onlyfun.caterpillar;

  import java.io.FileInputStream;
  import java.io.IOException;
  import java.util.Properties;

  public class BusinessFactory {
      private static BusinessFactory factory;
      private Properties props;




1 1
Chapter 1     識認   Spring




    private Business business;
    private IDeviceWriter writer;

    private BusinessFactory() throws Exception {
        props = new Properties();
        props.load(new FileInputStream("config.properties"));
        String businessClass = props.getProperty("business.class");
        String writerClass = props.getProperty("writer.class");
        business = (Business) Class.forName(
                                businessClass).newInstance();
        writer = (IDeviceWriter) Class.forName(
                                writerClass).newInstance();
        business.setDeviceWriter(writer); //    係關賴依立建
    }

    public static BusinessFactory getInstance() throws Exception {
        if (factory == null) {
            factory = new BusinessFactory();
        }

        return factory;
    }

    public Business getBusiness() {
        return business;
    }

    public IDeviceWriter getWriter() {
        return writer;
    }
}


的單簡個這              BusinessFactory 從將    config.properties   取讀中案檔
 與
business.class   writer.class   成完動自並,定設     Buniness   對    IDeviceWriter
設假。賴依的作實                        :定設麼這
                   config.properties

business.class=onlyfun.caterpillar.Business
writer.class=onlyfun.caterpillar.FloppyWriter




                                                                      1 11
1 12
              。面介                IDeviceWriter
                               於賴依也              、         U sbDiskWriter          Writer
F loppy-
     且,面介         I DeviceWriter
                         於賴依        讓而,上面介  B usiness                  IDeviceWriter
的象抽至移轉          FloppyWriter
                       的際實從權制控個整,中式程                的面                Business
上在。性用重可的件元得獲以可,權制控有擁方象抽讓由藉,方一的象抽
至移轉方一的作實由權制控將,轉反的係關制控是即轉反的係關賴依以所
                                           B
, 係關種 這 移 轉 要 想 您 , 權 制 控 有 擁 是 即 義 意 其 , 於 賴 依 果 如 。 移       B             A
轉的係關賴依種一是也義意的後背實其,思意的制控是                       的                  Control        IoC
                      。」象抽 於 賴依 要 都作 實 與 式程 是 而, 作 實於
賴 依 不 式程「是即思意的                   D ependency Inversion
                                      ,看來紹介的上以從
                      。案專                           BusinessFactoryDemo
          的中碟光考參以可,範示式程的整完                                  BusinessFactory
               。係關賴依的                  Business
                                定設來,能功器容 的                               IoC       Spring
                            2
用 使 何 如 到 看 以 可 將 章 第在, 大 強 為 更 能 功 且 而,能 功 理 管 態 組 的 樣 這
供提就器容心核           S pring
                   , 上實事 , 外 之 件 元 要 主 的式程 用 應 至 離 隔 立 建 的
係關賴依、立建的件物將以可,作實                           BusinessFactory
                                         的單簡個一過透
                      。作實                 saveToDevice()
                                        的例實                          UsbDiskWriter
是將的用使所上際實,時法方                    行執      save()
                                             ,段片式程的      Business
上以則,       onlyfun.caterpillar.UsbDiskWriter
                                  成換            中         writer.class          properties
config.果如,作實           saveToDevice()
                             的例實                是將的用使   FloppyWriter
所上際實,時法方           save()
                    行執       ,定設的   B usiness      據根   config.properties
                 business.save();
                 business = BusinessFactory.getInstance().getBusiness();
                                                          :法方 其行執        save()
並,例實       Business   得取        BusinessFactory   過 透下如 以 可 , 中 式 程 在 則
                  )   – http://openhome.cc          良信林(冊手術技                Spring 2.0
1 13
                                         。改修的何任作用不
 而架框或器容的它其至移轉,離脫中統系器容從時隨以可,用使器容被正
                           API
 到 識意會 不 身 本 式 程 用 應 , 定特 的 器 容 於 賴 依會不 而 故 , 源 資 求 要 動
 主器容向不式程用應,中式程用應至入注源資的需所將面介象抽些這過透
                                        API
 以 可器容 , 面 介 的 象 抽 於 賴依以 可 身 本 式 程 用 應 。 的依 相 器 容 與 現 出
 應不是就也,式程用應入侵)要不量儘或(該應不器容是的求要                           IoC
    。」!您 給 件物 些 這將 動 自 會器 容 ,源 資 )件 物 ( 的要 需 所求 要 器容
 向要不「是就,話的說來語術的式程以,」             D on't call me, I'll call you.
                                                      「
 :表代來言名塢萊好句一麼這用以可,度角的器容在 。難困生發會就            I oC
 ,時器容或架框的它其至移轉則,器容賴依於過輯邏務商果如,器容或架框
 的它其至輯邏務商的式程用應個整移轉能可有才來將樣這,響影的器容或
 架框用使所到受應不,的用重以可為計設要該應份部輯邏務商的式程
 Spring   識認   Chapter 1
Spring 2.0     良信林(冊手術技          – http://openhome.cc      )

 1.3 依賴注入(Dependency Injection)
        的
        IoC       在,念概式模的層高個一是上本基式模                 Martin Fowler      Inversion
          (
 of Control Containers and the Dependency Injection pattern         h ttp://www.
 :式方種兩有 現實,到談中)
 martinfowler.com/articles/injection.html                     IoC
            是的用採所
 Dependency Injection ,      與
                             Service Locator Spring                D ependency
 Injection        。入 注賴依為譯翻文中, 現實來
                       IoC


 於賴依)          (件組讓,面介象抽留保「:是義意的入注賴依                      C omponent
 來面介象抽過藉,時係關賴依生發件物的際實它其與要件組當,面介象抽
                            」。件 物 際 實 的 賴 依 入 注
 :式方現實本基種三了到談中章文的                 在入注賴依
                       Martin Fowler
 稱 別 分 並。
 Interface injection   與       、
                         S etter injection   Constructor injection
                 。
        Type 1 IoC       與      、
                        T ype 2 IoC         為其
                                       Type 3 IoC

    Type 2 IoC     、
                   T ype 3 IoC

    是的現實所    的到提所中節小個一前在         Business             Type 2 IoC也 ( 過透,Setter
     而,件物的賴依所入注)法方
              setXXX  是就                            Type 3 IoC  式構建在是則,
      :如例,係關賴依入注上)
        C onstructor   (
    public class BusinessObject {
        private IDeviceWriter writer;

          public BusinessObject(IDeviceWriter writer) {
              this.writer = writer;
          }

          public void save() {
              ....
              writer.saveToDevice();
          }
    }




1 14
Chapter 1    識認   Spring



用 使 您 許 允 也 但,)
Spring                 是就也(
                Setter injection            用 使 勵鼓
                                          Type 2 IoC
完來            是或
Constructor injection用 使 要。)
                        T ype 3 Ioc  (        Setter      Constructor
好的件物賴依入注法方構建用使,定而求需的您視全完,入注係關賴依成
果如而然,立建的係關賴依成完併一,時同的件物構建在以可,是一之處
用使時這,數參的串長一告宣上式構建在須必則,多很係關件物的立建要
稱名法方的確明有
Setter            為 因,擇 選 的 錯 不 個 是 會 係 關 賴 依 入 注 來
                                                 Setter
須 必 比 會,稱 名 的 樣 這      用 使,型 類 或 用 作 的 件 物 入 注 解 瞭 於 用 可
                                          setXXX()
        。好得來要件物的表代所置位數參個某,上法方構建詢查或憶記
Type 1 IoC

物,面介作實求要會時
Type 1 IoC     用使,        是
              Interface injection        Type 1 IoC
可以所,法方的定規所上面介道知器容,面介個這用使會也器容的在所件
個一告宣中 的器容如例,入注的係關賴依成完來件物的面介作實叫呼                            API
IDependency              :
public interface IDependency {
    public void createDependency(Map dependObjects);
}

讓,著接     Business   作實別類      IDependency   :面介
public class Business implement IDependency {
    private Map dependObjects; //       件物的賴依所錄記以用
    public void createDependency(Map dependObjects) {
        this.dependObject = dependObjects;
        //   與現實邊這在
             與現實邊這在
             與現實邊這在  Business         係關賴依的
                                      係關賴依的
                                      係關賴依的
        ......
    }

    public void save() {
        ....
        writer.saveToDevice();
    }
}




                                                                        1 1
1 16
                                          。性 靠 可 的 式 程 用 應 升
提幅大以可更,架框的熟成類這                  Spring
                                 過透,度程合耦的間之件物了低降
、寫撰式程的量大了少減僅不這,            )      BusinessFactory
                                          的前之如(係關賴依的
間之件物些這立建行自來式程些一寫撰地特必不您,係關賴依的間之件物
立 建 您 為 ,定 設 的 檔 態 組 據 根 期 時 行 執 在       Spring
                                         讓,)案檔             個   .properties
一是或案檔      XML  個一(案檔態組寫撰過透,式方的式構建或                                   Setter
用以可並,期週命生的件物理管以可,器容 個是心核的                   IoC                  Spring
                                                 。性用重的件
組低降而因,)架框(器容於依相件組或式程用應得使會,入注賴依現實
來 它 用使 ,性 入 侵 的 強較有 具 說 來 件 組 或 式 程 用 應 對             Type 1 IoC
                                                     以所
                                 。 離 脫 中 器容從 法 無 件 組 得 使 後 最
,雜複加更會賴依的)架框(器容與件組,面介的雜複多更生產將中係關
賴依的雜複更在,式方作實的樣這想想。)份部式程的面介                                     IDependency
作實改修是就也(式程改修須必就,中之架框或器容的它其至器容個這前
目離脫算打     Business
                 後日果如, 的器容於賴依   API                 Business
                                                 得使就這,面
介的定規所器容現實            Business
                         求要       Type 1 IoC
                                       於由,中子例的面上在
                                                   。立建的係關賴
依成完來法方     createDependency()   的 件 物 理 管 被 行 執 會 器 容,件 物 理 管 來
器 容 讓 並,面介   IDependency    現 實 須 必,件 物 的 入 注 係 關 賴 依 成 完 要 果 如
              )   – http://openhome.cc     良信林(冊手術技              Spring 2.0
1 17
                件物的要想所您給會器容,器容叫呼要不      1.2   圖
                     。      用使中   Spring IDE       Eclipse
 在何如解了並,式程    個一第寫撰中 Spring   Eclipse
                        在何如紹介將先首,念
 觀的到紹介節章個這在個各會體,中用使與定設的    從接直將,始開      Spring
 節章個一下從,邊這到談先就念概及語術的識認需所    門入於關          Spring
                                1.4 接下來的主題
 Spring   識認   Chapter 1

More Related Content

What's hot

Servlet & JSP 教學手冊第二版試讀 - 撰寫與設定 Servlet
Servlet & JSP 教學手冊第二版試讀 - 撰寫與設定 ServletServlet & JSP 教學手冊第二版試讀 - 撰寫與設定 Servlet
Servlet & JSP 教學手冊第二版試讀 - 撰寫與設定 Servlet
Justin Lin
 
Spring 2.0 技術手冊第六章 - Hibernate 與 Spring
Spring 2.0 技術手冊第六章 - Hibernate 與 SpringSpring 2.0 技術手冊第六章 - Hibernate 與 Spring
Spring 2.0 技術手冊第六章 - Hibernate 與 Spring
Justin Lin
 
CH12:Lambda
CH12:LambdaCH12:Lambda
CH12:Lambda
Justin Lin
 
Introduction to Spring Framework and Spring IoC
Introduction to Spring Framework and Spring IoCIntroduction to Spring Framework and Spring IoC
Introduction to Spring Framework and Spring IoC
Funnelll
 
Ch02 撰寫與設定 Servlet
Ch02 撰寫與設定 ServletCh02 撰寫與設定 Servlet
Ch02 撰寫與設定 Servlet
Justin Lin
 
Spring framework
Spring frameworkSpring framework
Spring framework
Rajkumar Singh
 
CH1. 簡介 Web 應用程式
CH1. 簡介 Web 應用程式CH1. 簡介 Web 應用程式
CH1. 簡介 Web 應用程式
Justin Lin
 
Java spring framework
Java spring frameworkJava spring framework
Java spring framework
Rajiv Gupta
 
Ch05 Servlet 進階 API、過濾器與傾聽器
Ch05 Servlet 進階 API、過濾器與傾聽器Ch05 Servlet 進階 API、過濾器與傾聽器
Ch05 Servlet 進階 API、過濾器與傾聽器
Justin Lin
 
Ch04 會話管理
Ch04 會話管理Ch04 會話管理
Ch04 會話管理
Justin Lin
 
Spring framework core
Spring framework coreSpring framework core
Spring framework core
Taemon Piya-Lumyong
 
Java SE 再入門
Java SE 再入門Java SE 再入門
Java SE 再入門
minazou67
 
Java SE 8 技術手冊第 1 章 - Java平台概論
Java SE 8 技術手冊第 1 章 - Java平台概論Java SE 8 技術手冊第 1 章 - Java平台概論
Java SE 8 技術手冊第 1 章 - Java平台概論
Justin Lin
 
Ch03 請求與回應
Ch03 請求與回應Ch03 請求與回應
Ch03 請求與回應
Justin Lin
 
Spring mvc
Spring mvcSpring mvc
Spring mvc
Pravin Pundge
 
Spring Framework - Core
Spring Framework - CoreSpring Framework - Core
Spring Framework - Core
Dzmitry Naskou
 
Ch07 使用 JSTL
Ch07 使用 JSTLCh07 使用 JSTL
Ch07 使用 JSTL
Justin Lin
 
JJUG CCC 2013 Fall「JVMコードリーディング入門-JVMのOS抽象化レイヤーについて-」
JJUG CCC 2013 Fall「JVMコードリーディング入門-JVMのOS抽象化レイヤーについて-」JJUG CCC 2013 Fall「JVMコードリーディング入門-JVMのOS抽象化レイヤーについて-」
JJUG CCC 2013 Fall「JVMコードリーディング入門-JVMのOS抽象化レイヤーについて-」
y torazuka
 
Spring framework Introduction
Spring framework IntroductionSpring framework Introduction
Spring framework Introduction
Anuj Singh Rajput
 
Spring Framework
Spring Framework  Spring Framework
Spring Framework
tola99
 

What's hot (20)

Servlet & JSP 教學手冊第二版試讀 - 撰寫與設定 Servlet
Servlet & JSP 教學手冊第二版試讀 - 撰寫與設定 ServletServlet & JSP 教學手冊第二版試讀 - 撰寫與設定 Servlet
Servlet & JSP 教學手冊第二版試讀 - 撰寫與設定 Servlet
 
Spring 2.0 技術手冊第六章 - Hibernate 與 Spring
Spring 2.0 技術手冊第六章 - Hibernate 與 SpringSpring 2.0 技術手冊第六章 - Hibernate 與 Spring
Spring 2.0 技術手冊第六章 - Hibernate 與 Spring
 
CH12:Lambda
CH12:LambdaCH12:Lambda
CH12:Lambda
 
Introduction to Spring Framework and Spring IoC
Introduction to Spring Framework and Spring IoCIntroduction to Spring Framework and Spring IoC
Introduction to Spring Framework and Spring IoC
 
Ch02 撰寫與設定 Servlet
Ch02 撰寫與設定 ServletCh02 撰寫與設定 Servlet
Ch02 撰寫與設定 Servlet
 
Spring framework
Spring frameworkSpring framework
Spring framework
 
CH1. 簡介 Web 應用程式
CH1. 簡介 Web 應用程式CH1. 簡介 Web 應用程式
CH1. 簡介 Web 應用程式
 
Java spring framework
Java spring frameworkJava spring framework
Java spring framework
 
Ch05 Servlet 進階 API、過濾器與傾聽器
Ch05 Servlet 進階 API、過濾器與傾聽器Ch05 Servlet 進階 API、過濾器與傾聽器
Ch05 Servlet 進階 API、過濾器與傾聽器
 
Ch04 會話管理
Ch04 會話管理Ch04 會話管理
Ch04 會話管理
 
Spring framework core
Spring framework coreSpring framework core
Spring framework core
 
Java SE 再入門
Java SE 再入門Java SE 再入門
Java SE 再入門
 
Java SE 8 技術手冊第 1 章 - Java平台概論
Java SE 8 技術手冊第 1 章 - Java平台概論Java SE 8 技術手冊第 1 章 - Java平台概論
Java SE 8 技術手冊第 1 章 - Java平台概論
 
Ch03 請求與回應
Ch03 請求與回應Ch03 請求與回應
Ch03 請求與回應
 
Spring mvc
Spring mvcSpring mvc
Spring mvc
 
Spring Framework - Core
Spring Framework - CoreSpring Framework - Core
Spring Framework - Core
 
Ch07 使用 JSTL
Ch07 使用 JSTLCh07 使用 JSTL
Ch07 使用 JSTL
 
JJUG CCC 2013 Fall「JVMコードリーディング入門-JVMのOS抽象化レイヤーについて-」
JJUG CCC 2013 Fall「JVMコードリーディング入門-JVMのOS抽象化レイヤーについて-」JJUG CCC 2013 Fall「JVMコードリーディング入門-JVMのOS抽象化レイヤーについて-」
JJUG CCC 2013 Fall「JVMコードリーディング入門-JVMのOS抽象化レイヤーについて-」
 
Spring framework Introduction
Spring framework IntroductionSpring framework Introduction
Spring framework Introduction
 
Spring Framework
Spring Framework  Spring Framework
Spring Framework
 

More from Justin Lin

Ch14 簡介 Spring Boot
Ch14 簡介 Spring BootCh14 簡介 Spring Boot
Ch14 簡介 Spring Boot
Justin Lin
 
Ch11 簡介 JavaMail
Ch11 簡介 JavaMailCh11 簡介 JavaMail
Ch11 簡介 JavaMail
Justin Lin
 
Ch10 Web 容器安全管理
Ch10 Web 容器安全管理Ch10 Web 容器安全管理
Ch10 Web 容器安全管理
Justin Lin
 
Ch09 整合資料庫
Ch09 整合資料庫Ch09 整合資料庫
Ch09 整合資料庫
Justin Lin
 
Ch08 自訂標籤
Ch08 自訂標籤Ch08 自訂標籤
Ch08 自訂標籤
Justin Lin
 
Ch06 使用 JSP
Ch06 使用 JSPCh06 使用 JSP
Ch06 使用 JSP
Justin Lin
 
14. 進階主題
14. 進階主題14. 進階主題
14. 進階主題
Justin Lin
 
13.並行、平行與非同步
13.並行、平行與非同步13.並行、平行與非同步
13.並行、平行與非同步
Justin Lin
 
12. 除錯、測試與效能
12. 除錯、測試與效能12. 除錯、測試與效能
12. 除錯、測試與效能
Justin Lin
 
11. 常用內建模組
11. 常用內建模組11. 常用內建模組
11. 常用內建模組
Justin Lin
 
10. 資料永續與交換
10. 資料永續與交換10. 資料永續與交換
10. 資料永續與交換
Justin Lin
 
9. 資料結構
9. 資料結構9. 資料結構
9. 資料結構
Justin Lin
 
8. open() 與 io 模組
8. open() 與 io 模組8. open() 與 io 模組
8. open() 與 io 模組
Justin Lin
 
7. 例外處理
7. 例外處理7. 例外處理
7. 例外處理
Justin Lin
 
6. 類別的繼承
6. 類別的繼承6. 類別的繼承
6. 類別的繼承
Justin Lin
 
5. 從模組到類別
5. 從模組到類別5. 從模組到類別
5. 從模組到類別
Justin Lin
 
4. 流程語法與函式
4. 流程語法與函式4. 流程語法與函式
4. 流程語法與函式
Justin Lin
 
3.型態與運算子
3.型態與運算子3.型態與運算子
3.型態與運算子
Justin Lin
 
1. Python起步走
1. Python起步走1. Python起步走
1. Python起步走
Justin Lin
 
2. 從 REPL 到 IDE
2. 從 REPL 到 IDE2. 從 REPL 到 IDE
2. 從 REPL 到 IDE
Justin Lin
 

More from Justin Lin (20)

Ch14 簡介 Spring Boot
Ch14 簡介 Spring BootCh14 簡介 Spring Boot
Ch14 簡介 Spring Boot
 
Ch11 簡介 JavaMail
Ch11 簡介 JavaMailCh11 簡介 JavaMail
Ch11 簡介 JavaMail
 
Ch10 Web 容器安全管理
Ch10 Web 容器安全管理Ch10 Web 容器安全管理
Ch10 Web 容器安全管理
 
Ch09 整合資料庫
Ch09 整合資料庫Ch09 整合資料庫
Ch09 整合資料庫
 
Ch08 自訂標籤
Ch08 自訂標籤Ch08 自訂標籤
Ch08 自訂標籤
 
Ch06 使用 JSP
Ch06 使用 JSPCh06 使用 JSP
Ch06 使用 JSP
 
14. 進階主題
14. 進階主題14. 進階主題
14. 進階主題
 
13.並行、平行與非同步
13.並行、平行與非同步13.並行、平行與非同步
13.並行、平行與非同步
 
12. 除錯、測試與效能
12. 除錯、測試與效能12. 除錯、測試與效能
12. 除錯、測試與效能
 
11. 常用內建模組
11. 常用內建模組11. 常用內建模組
11. 常用內建模組
 
10. 資料永續與交換
10. 資料永續與交換10. 資料永續與交換
10. 資料永續與交換
 
9. 資料結構
9. 資料結構9. 資料結構
9. 資料結構
 
8. open() 與 io 模組
8. open() 與 io 模組8. open() 與 io 模組
8. open() 與 io 模組
 
7. 例外處理
7. 例外處理7. 例外處理
7. 例外處理
 
6. 類別的繼承
6. 類別的繼承6. 類別的繼承
6. 類別的繼承
 
5. 從模組到類別
5. 從模組到類別5. 從模組到類別
5. 從模組到類別
 
4. 流程語法與函式
4. 流程語法與函式4. 流程語法與函式
4. 流程語法與函式
 
3.型態與運算子
3.型態與運算子3.型態與運算子
3.型態與運算子
 
1. Python起步走
1. Python起步走1. Python起步走
1. Python起步走
 
2. 從 REPL 到 IDE
2. 從 REPL 到 IDE2. 從 REPL 到 IDE
2. 從 REPL 到 IDE
 

Recently uploaded

DevOpsDays Taipei 2024 DevOps加入Biz讓DevOps在企業價值定位
DevOpsDays Taipei 2024 DevOps加入Biz讓DevOps在企業價值定位DevOpsDays Taipei 2024 DevOps加入Biz讓DevOps在企業價值定位
DevOpsDays Taipei 2024 DevOps加入Biz讓DevOps在企業價值定位
Edward Kuo
 
【炎龍老師的 AI 模組課程】02 用遷移式學習做八哥辨識: CNN 的原理、用名門 CNN 模型作遷移式學習
【炎龍老師的 AI 模組課程】02 用遷移式學習做八哥辨識: CNN 的原理、用名門 CNN 模型作遷移式學習【炎龍老師的 AI 模組課程】02 用遷移式學習做八哥辨識: CNN 的原理、用名門 CNN 模型作遷移式學習
【炎龍老師的 AI 模組課程】02 用遷移式學習做八哥辨識: CNN 的原理、用名門 CNN 模型作遷移式學習
Yen-lung Tsai
 
【炎龍老師的 AI 模組課程】01 用全連結神經網路打造手寫辨識 AI: AI 原理與 MNIST 數據集
【炎龍老師的 AI 模組課程】01 用全連結神經網路打造手寫辨識 AI: AI 原理與 MNIST 數據集【炎龍老師的 AI 模組課程】01 用全連結神經網路打造手寫辨識 AI: AI 原理與 MNIST 數據集
【炎龍老師的 AI 模組課程】01 用全連結神經網路打造手寫辨識 AI: AI 原理與 MNIST 數據集
Yen-lung Tsai
 
有請Gemini大師,看圖占卜,指引職涯發展方向
有請Gemini大師,看圖占卜,指引職涯發展方向有請Gemini大師,看圖占卜,指引職涯發展方向
有請Gemini大師,看圖占卜,指引職涯發展方向
佳新 陳
 
【炎龍老師的 AI 模組課程】03 和 AI PK 誰比較會認 IVE 成員: Contrastive Learning、人臉辨識
【炎龍老師的 AI 模組課程】03 和 AI PK 誰比較會認 IVE 成員: Contrastive Learning、人臉辨識【炎龍老師的 AI 模組課程】03 和 AI PK 誰比較會認 IVE 成員: Contrastive Learning、人臉辨識
【炎龍老師的 AI 模組課程】03 和 AI PK 誰比較會認 IVE 成員: Contrastive Learning、人臉辨識
Yen-lung Tsai
 
【炎龍老師的 AI 模組課程】04 打造自己的 ChatGPT: 文字生成 AI 的原理、LLM 為什麼這麼厲害、OpenAI API
【炎龍老師的 AI 模組課程】04 打造自己的 ChatGPT: 文字生成 AI 的原理、LLM 為什麼這麼厲害、OpenAI API【炎龍老師的 AI 模組課程】04 打造自己的 ChatGPT: 文字生成 AI 的原理、LLM 為什麼這麼厲害、OpenAI API
【炎龍老師的 AI 模組課程】04 打造自己的 ChatGPT: 文字生成 AI 的原理、LLM 為什麼這麼厲害、OpenAI API
Yen-lung Tsai
 

Recently uploaded (6)

DevOpsDays Taipei 2024 DevOps加入Biz讓DevOps在企業價值定位
DevOpsDays Taipei 2024 DevOps加入Biz讓DevOps在企業價值定位DevOpsDays Taipei 2024 DevOps加入Biz讓DevOps在企業價值定位
DevOpsDays Taipei 2024 DevOps加入Biz讓DevOps在企業價值定位
 
【炎龍老師的 AI 模組課程】02 用遷移式學習做八哥辨識: CNN 的原理、用名門 CNN 模型作遷移式學習
【炎龍老師的 AI 模組課程】02 用遷移式學習做八哥辨識: CNN 的原理、用名門 CNN 模型作遷移式學習【炎龍老師的 AI 模組課程】02 用遷移式學習做八哥辨識: CNN 的原理、用名門 CNN 模型作遷移式學習
【炎龍老師的 AI 模組課程】02 用遷移式學習做八哥辨識: CNN 的原理、用名門 CNN 模型作遷移式學習
 
【炎龍老師的 AI 模組課程】01 用全連結神經網路打造手寫辨識 AI: AI 原理與 MNIST 數據集
【炎龍老師的 AI 模組課程】01 用全連結神經網路打造手寫辨識 AI: AI 原理與 MNIST 數據集【炎龍老師的 AI 模組課程】01 用全連結神經網路打造手寫辨識 AI: AI 原理與 MNIST 數據集
【炎龍老師的 AI 模組課程】01 用全連結神經網路打造手寫辨識 AI: AI 原理與 MNIST 數據集
 
有請Gemini大師,看圖占卜,指引職涯發展方向
有請Gemini大師,看圖占卜,指引職涯發展方向有請Gemini大師,看圖占卜,指引職涯發展方向
有請Gemini大師,看圖占卜,指引職涯發展方向
 
【炎龍老師的 AI 模組課程】03 和 AI PK 誰比較會認 IVE 成員: Contrastive Learning、人臉辨識
【炎龍老師的 AI 模組課程】03 和 AI PK 誰比較會認 IVE 成員: Contrastive Learning、人臉辨識【炎龍老師的 AI 模組課程】03 和 AI PK 誰比較會認 IVE 成員: Contrastive Learning、人臉辨識
【炎龍老師的 AI 模組課程】03 和 AI PK 誰比較會認 IVE 成員: Contrastive Learning、人臉辨識
 
【炎龍老師的 AI 模組課程】04 打造自己的 ChatGPT: 文字生成 AI 的原理、LLM 為什麼這麼厲害、OpenAI API
【炎龍老師的 AI 模組課程】04 打造自己的 ChatGPT: 文字生成 AI 的原理、LLM 為什麼這麼厲害、OpenAI API【炎龍老師的 AI 模組課程】04 打造自己的 ChatGPT: 文字生成 AI 的原理、LLM 為什麼這麼厲害、OpenAI API
【炎龍老師的 AI 模組課程】04 打造自己的 ChatGPT: 文字生成 AI 的原理、LLM 為什麼這麼厲害、OpenAI API
 

Spring 2.0 技術手冊第一章 - 認識 Spring

  • 1. 作 語 術 些 這 對 針 將,中 節 章 個 這 在,措 所 知 不 往 往 語 術 等 、 A OP IoC 、 器 容、性 入 侵 非、級 量 輕 對 面,說 來 者 學 初 的 門入算打於對 Spring 。案方 的合整相們它與了供提也 ,)等 S pring 、 、 ( H ibernate J SF S truts 架框種各的存現於對,外之此除,) ( A pplication framework 架框式程用應的位方全個一是,裝封型模的致一供提) Interface ( 務 服 業 企 的 用 常 些 一 於 對 並,現 實 的 架 框 API A pplication MVC Web 供提,援支的) (易交、) T ransaction (層久持對供提 P ersistence ,式方現實的) ( 供提並,架框 A spect-oriented programming AOP 的) (性 入 侵 非 、 器 容) N o intrusive ( 現實 I nversion of Control IoC 它,) (器 容 的) C ontainer (級 量 輕 個 是 心 核 的 L ightweight Spring 認識 Spring 1
  • 2. 1 2 。礎基的時現 實念概語術些這對 Spring 紹介,中節章個各後往為作以,紹介些一 ) – http://openhome.cc 良信林(冊手術技 Spring 2.0
  • 3. 1 3 。用使接 直中之架框或式程用應個一另到拿接直以可,件組些某中式程用應,話的 Spring 用使,說的單簡。) R eusability (性用重可的件組式程用應加增步 一進,擔負的時植移架框從式程用應低減,在存的架框到不受感乎幾式程 用 應 讓 望 希,架 框) N o intrusive (性 入 侵 非 個 一 現 實 是 一 之 標 目 的 Spring 。中之式程用應個一另於用重接直以可件組的中當說別更,來出立獨中 架框從法無而,賴依生發架框與件組式程用應使會都,等別類些某的 API API 承繼接直或, 的架框了用使量大如例,賴依了生發架框與就式程用應 ,用 使 被 旦 一 架 框 些 有 而 然,式 程 用 應 的 需 所 下 構 架 循 依 出 發 開 的 速 快,上 礎基的架框於基以可員人發開讓,現實的構架個一供提是意用的來原架框 ) (性入侵非 N o intrusive 。 Spring 用使中備設型小在以可至甚您,的小很是也擔負源資 的要需所心核 Spring 用使而,小大的 到不有只上量容案檔在心核的 1MB S pring EJB ,的說來)器容 如(器容的級量重些一於對相是容形的級量輕 ) (級量輕 L ightweight 。 識認的 本 基 個 有 念 概 與 語術些 這 對 您 讓 以 可 明 說 的下以,言而者學初的 Spring 門入於對,語術等) oriented programming ( 、) A spect- A OP ( 、) I nversion of Control (性入侵非 I oC N o intrusive 、 器 容、級 量 輕 是 像 到 觸 接 得 就 時 用使在,) Spring(架框式程 F ramework 用應的面方全個一為作,多越來越也語術與念概的上作實與計設在域領個各 而 因,雜 複越 來越 用應 的 域領個 各於 式程 用應 , 日今 在於 由 , ) framework A pplication (架框式程用應的位方全個一為作是,一之標目的 Spring 1.1 術語介紹 Spring 識認 Chapter 1
  • 4. 1 4 ,上 Spring AOP 至 映 反 注 關 的 於 對 們 人,述 描 的 當 適 件 一 是 不 並 架 框 AOP 是架框 Spring說,架 框 子 個 一 的 援 支 Spring 是 只 架 框 而 然,現 實 的 AOP )A spect-oriented programming AOP ( 援支是一之能功的視重人為最 Spring ) A spect-oriented programming ( AOP 。念概的 Dependency Injection與 Inversion of Control 紹介細詳會還,中節一下在 。件物的定指 入注賴依將,態組據根動自會器容心核 S pring ,定設以加中檔態組在需只 , 係 關 賴 依 的 件 物 護 維 中 碼 式 程 在 己 自 必 不, Spring 用 使。 稱 簡,」 入 注 DI 賴依「作翻常文中, Dependency Injection 為念概心核要重個一另 Spring 。難困的離脫器容 從式程用應成造,能功的器容於賴依式程用應免避以可,說來度角的器容 從,合耦的間之件物免避以可,說來度角的件物從,念觀的要重是」作實 非而象抽於賴依「、」移 轉的係關賴依「,中 Spring 在。 稱簡,」轉 IoC 反制控「作翻常文中, Inversion of Control 是念概心核的要重最 Spring Dependency Injection 與 Inversion of Control 。好作您幫動自會都器容在現,係關件物理管以式程寫撰行 自須必先原,式程的寫撰所 個一是就器容,說來體具度角的 從 Java Java 。係關賴依的間之件物與件物立建是或,件物生產 來碼式程行一何任寫撰用不,用取接直以可都件物的有所,後之器容動啟 在,等 性 屬 的 件 物 個 某 為 成 定 設 須 必 後 之 生 產 件 物 個 哪、) 式 方 Singleton 或式方 P rototype (生產何如、稱名件物義定中當在,) 是常通(案 XML 檔定設態組個一用使以可您,能功器容供提 S pring 。係關賴依的間之件物 與件物成完至甚,期週命生等毀銷、得取源資、成生的件物理管以可器容 ) (器容 C ontainer ) – http://openhome.cc 良信林(冊手術技 Spring 2.0
  • 5. 1 。式程用應的行進所前當於用適而,合整 與以可都 Spring ,等 、 J SF Struts 是 像,合 整 Spring 與架框 的悉熟所己自將以可也您 Web 。術技面畫的者用使給 PDF 現展為作 用使、 合結、 用使如例,術技層 的同不用使Tiles JSP View AOP IoC 換 抽 的 鬆 輕 以 可 至 甚 您,能 功 的 與 身 本 其 用 善 以 可 是 處 好 的 架 框 Spring Web 用使,案方決解的架框) ( W eb MVC 供提也 Model 2 Spring 架框 Web 。案方決解的應對了供提也 ,化簡的 S pring 上 用 使 及 合 整 的) 、 i BATIS (具 工 H ibernate O/R Mapping 於 對, 能 功 理 管 ) Declarative Transaction (易交式告宣與) P rogrammatic Transaction (易交式 程 編 供提 ,化 簡 與裝 封以 加用 使的 JDBC 對如 ,合 整 的 層久 持對供提 Spring 層久持 。案方合整架框的 供提望 one-stop shop 希 S pring ,代替以加案方架框的它其合結以可也,立獨以可此彼能功 API 的裝封或架框子些這的 S pring ,能功 與器容 的 AOP 於重依些 IoC Spring API 有 現 實 的 們 它,裝 封 的 務 服 業 企 種 各 及 以 架 框 、層 久 持 了 現 M VC Web 實中 Spring 在,在所心重其是現實的能功 與能功器容 的 AOP IoC Spring 。除移能功誌日個這將 ,下況情的式程何任改修不在以可也,意願您若而,中式程用應的先原至 入 加 求 需 個 這 將 就,碼 式 程 行 一 何 任 改 修 須 無 以 可 您,求 需 的) ( L ogging 誌日個有式程用應設假,用應個一的 明說來子例的際實個舉 AOP 。色特的注關人令個一另的 了顯突也 Spring 但,解誤所有然雖,上架框 的它在中集注關的 AOP 於對們人得使 Spring Spring 識認 Chapter 1
  • 6. 1 6 。會體中作實從節章 的後往在以可您,現實的體具有都念概些這中 在,解了 Spring 能太不是還能可語術些這上以對面,驗經的發開人前收吸來習 學的 Spring 由藉望希是只,驗經的架框它其過用使有沒您果如 。化簡為更上用使在且並,型模用使的致一有以可時用使在務服些 這讓,裝封行進務服些這對式方層象抽取採是而,作實供提接直不 Spring Remoting ,等) (程遠、) Scheduling (程排、 、 如例,務服些一於對 Mail JNDI 裝封的務服業企它其 ) – http://openhome.cc 良信林(冊手術技 Spring 2.0
  • 7. 1 7 。 係 關 賴依了 生 產 組 模 層 低 對 就 ,式函的組模層低行執叫呼接直組模層高果如,求需式程的份備檔存個是 組模層高而,計設取存機碟軟的關相體硬與是能可組模層低如例。組模作 實 的層 低 於賴 依 不 而 ,性 用重 有 具該 應 它 ,組 模 的 關 相) B usiness logic ( 輯邏務商與是常通組模象抽的層高,時計設組模行進在,說的單簡 。性用重可的 式程用應進改而進,轉反係關賴依的良不種這將何如要又而,計設係關賴 依 的良不 些 哪 有 去 過 看 看 ,轉反 的 係 關 賴 依 是 就 也, 解 瞭 始 開 Inversion Dependency IoC 從先可, 解瞭要,義意其解瞭易容不上面字從, 看初 IoC 。 」轉反 制 控 「 是 就 , 話 的來過 譯 翻 要 硬 文 中 果 如 , Inversion of Control I oC 名全 ?思意麼什是 底到,後之炸轟字文的象抽串連一 IoC IoC 。 現 表 種 一 的 是也」 式 程 用 應 於 務 服 器容是 而 , 器 容 於 賴 依 應 IoC 不 式程用 應 「 , 現 表 種 一 的 是 也 」 現 實 賴 依 象抽是 不 而 , 象 抽 賴 依 須 IoC 必現 實 「 , 現 表 種 一 的 是 」 象 抽 於 賴 依 須 必 都組模 是 而 , 組 模 層 低 賴 依該應不組模層高「是像,的說來計設式程用應的良不去過於對相是移轉 。」移 轉 的係 關 賴依「是念概象抽的 , 是念概心核的 I oC IoC Spring 1.2 控制反轉(Inversion of Control) Spring 識認 Chapter 1
  • 8. 1 8 } } writer.saveToFloppy(); ... public void save() { .... private FloppyWriter writer = new FloppyWriter(); public class Business { Java : 例 為 式 程 以 。 」面介 象 抽 於 賴 依 是 而 ,作實 賴 依 應 不 式 程 「 為 釋解) D ependency Inversion (轉反賴依,計設來式方的向導件物以若 。計設式程 用應的層高用使複重以可才樣這,象抽的組模於賴依都組模望希上計設在 。式方計設的好個一是不這,動更著跟須必也組模層高了成造,動更的體 媒存儲的組模層低於由,中子例個這在。行才改修以加須必,用重接直法 無式程用應個這則,體媒存儲為作碟磁 用使台平該而,上台平個一另 USB API 至 植移式 程 用 應 將 要 天 今 設 假 。 的 組 模 層 低 於賴依 式 程 用 應 層 高 致 導 ,saveToFloppy() 了行執接直時求需存儲要需在式程用應,中 圖在 1.1 作實組模層低賴依組模層高 1.1 圖 … 賴依生產組模層低對 API 式程用應致導, 的組模層低 叫呼中 式程用應的層高在接直 ) – http://openhome.cc 良信林(冊手術技 Spring 2.0
  • 9. Chapter 1 識認 Spring 的際實於賴依求需的檔存,中計設的別類 Business FloppyWriter 物 改 修 須 必 則 , 碟 磁 為 改 介 媒 存儲將 要 想 天 今 果 如 , 件 USB Business 程的 。別類 用使複 重 接 直 法 無 您 , 式 Business 個一告宣先可如例,況情一此進改以可,告宣的面介過透果如 IDeviceWriter :面介 public interface IDeviceWriter { public void saveToDevice(); } 於 賴 依 為 計 設 以 可,時 求 需 檔 存 到 遇 在,別 類 Business 的計設所著接 :如例, IDeviceWriter 的際實於賴依是不而,面介 FloppyWriter public class Business { private IDeviceWriter writer; public void setDeviceWriter(IDeviceWriter writer) { this.writer = writer; } public void save() { .... writer.saveToDevice(); } } 至存儲有天今果如,的用重以可是就別類 B usiness ,下計設的樣這在 Floppy 作 實 別 分 求 需 存 儲種兩 這 對 針 要 只 , 求 需 的 碟 磁 或 USB IDevice- :別類 Writer 個 一計設 存 儲 的 機 碟 軟 對 針如 例 , 可 即 面 介 FloppyWriter public class FloppyWriter implement IDeviceWriter { public void saveToDevice() { .... //至存儲際實 至存儲際實 至存儲際實 至存儲際實 Floppy 碼式程的 碼式程的 碼式程的 碼式程的 } } 1
  • 10. Spring 2.0 良信林(冊手術技 – http://openhome.cc ) 對針是或 USB 個一計設存儲的碟磁 UsbDiskWriter :別類 public class UsbDiskWriter implement IDeviceWriter { public void saveToDevice() { .... // 至存儲際實 至存儲際實 至存儲際實 至存儲際實 UsbDisk 碼式程的 碼式程的 碼式程的 碼式程的 } } : 下 如 式 程 態 組 個 一寫撰 以 可 , 話 的 存 儲 機碟軟 要 需 式 程 用 應 果 如 Business business = new Business(); business.setDeviceWriter(new FloppyWriter()); business.save(); 要需式程用應果如,的樣同 USB 程態組個一寫撰以可,話的存儲碟磁 :下如式 Business business = new Business(); business.setDeviceWriter(new UsbDiskWriter()); business.save(); 都說來別類 於 對 ,動 變 何 如 作 實 存 儲 的 層 低 論 無 , 到 看 以 可 Business 的單簡個一由藉,式程理管態組個一寫撰以可也您。改修何任需無 XML 就 ,寫撰 必 不 都 式 程 態 組 的上以 連 此 如 , 態 組 改 更 來 案 檔 .properties 是或 簡個寫如例,作實 Business的賴依所別類 換更的單簡以可 IDeviceWriter BusinessFactory : 的單 package onlyfun.caterpillar; import java.io.FileInputStream; import java.io.IOException; import java.util.Properties; public class BusinessFactory { private static BusinessFactory factory; private Properties props; 1 1
  • 11. Chapter 1 識認 Spring private Business business; private IDeviceWriter writer; private BusinessFactory() throws Exception { props = new Properties(); props.load(new FileInputStream("config.properties")); String businessClass = props.getProperty("business.class"); String writerClass = props.getProperty("writer.class"); business = (Business) Class.forName( businessClass).newInstance(); writer = (IDeviceWriter) Class.forName( writerClass).newInstance(); business.setDeviceWriter(writer); // 係關賴依立建 } public static BusinessFactory getInstance() throws Exception { if (factory == null) { factory = new BusinessFactory(); } return factory; } public Business getBusiness() { return business; } public IDeviceWriter getWriter() { return writer; } } 的單簡個這 BusinessFactory 從將 config.properties 取讀中案檔 與 business.class writer.class 成完動自並,定設 Buniness 對 IDeviceWriter 設假。賴依的作實 :定設麼這 config.properties business.class=onlyfun.caterpillar.Business writer.class=onlyfun.caterpillar.FloppyWriter 1 11
  • 12. 1 12 。面介 IDeviceWriter 於賴依也 、 U sbDiskWriter Writer F loppy- 且,面介 I DeviceWriter 於賴依 讓而,上面介 B usiness IDeviceWriter 的象抽至移轉 FloppyWriter 的際實從權制控個整,中式程 的面 Business 上在。性用重可的件元得獲以可,權制控有擁方象抽讓由藉,方一的象抽 至移轉方一的作實由權制控將,轉反的係關制控是即轉反的係關賴依以所 B , 係關種 這 移 轉 要 想 您 , 權 制 控 有 擁 是 即 義 意 其 , 於 賴 依 果 如 。 移 B A 轉的係關賴依種一是也義意的後背實其,思意的制控是 的 Control IoC 。」象抽 於 賴依 要 都作 實 與 式程 是 而, 作 實於 賴 依 不 式程「是即思意的 D ependency Inversion ,看來紹介的上以從 。案專 BusinessFactoryDemo 的中碟光考參以可,範示式程的整完 BusinessFactory 。係關賴依的 Business 定設來,能功器容 的 IoC Spring 2 用 使 何 如 到 看 以 可 將 章 第在, 大 強 為 更 能 功 且 而,能 功 理 管 態 組 的 樣 這 供提就器容心核 S pring , 上實事 , 外 之 件 元 要 主 的式程 用 應 至 離 隔 立 建 的 係關賴依、立建的件物將以可,作實 BusinessFactory 的單簡個一過透 。作實 saveToDevice() 的例實 UsbDiskWriter 是將的用使所上際實,時法方 行執 save() ,段片式程的 Business 上以則, onlyfun.caterpillar.UsbDiskWriter 成換 中 writer.class properties config.果如,作實 saveToDevice() 的例實 是將的用使 FloppyWriter 所上際實,時法方 save() 行執 ,定設的 B usiness 據根 config.properties business.save(); business = BusinessFactory.getInstance().getBusiness(); :法方 其行執 save() 並,例實 Business 得取 BusinessFactory 過 透下如 以 可 , 中 式 程 在 則 ) – http://openhome.cc 良信林(冊手術技 Spring 2.0
  • 13. 1 13 。改修的何任作用不 而架框或器容的它其至移轉,離脫中統系器容從時隨以可,用使器容被正 API 到 識意會 不 身 本 式 程 用 應 , 定特 的 器 容 於 賴 依會不 而 故 , 源 資 求 要 動 主器容向不式程用應,中式程用應至入注源資的需所將面介象抽些這過透 API 以 可器容 , 面 介 的 象 抽 於 賴依以 可 身 本 式 程 用 應 。 的依 相 器 容 與 現 出 應不是就也,式程用應入侵)要不量儘或(該應不器容是的求要 IoC 。」!您 給 件物 些 這將 動 自 會器 容 ,源 資 )件 物 ( 的要 需 所求 要 器容 向要不「是就,話的說來語術的式程以,」 D on't call me, I'll call you. 「 :表代來言名塢萊好句一麼這用以可,度角的器容在 。難困生發會就 I oC ,時器容或架框的它其至移轉則,器容賴依於過輯邏務商果如,器容或架框 的它其至輯邏務商的式程用應個整移轉能可有才來將樣這,響影的器容或 架框用使所到受應不,的用重以可為計設要該應份部輯邏務商的式程 Spring 識認 Chapter 1
  • 14. Spring 2.0 良信林(冊手術技 – http://openhome.cc ) 1.3 依賴注入(Dependency Injection) 的 IoC 在,念概式模的層高個一是上本基式模 Martin Fowler Inversion ( of Control Containers and the Dependency Injection pattern h ttp://www. :式方種兩有 現實,到談中) martinfowler.com/articles/injection.html IoC 是的用採所 Dependency Injection , 與 Service Locator Spring D ependency Injection 。入 注賴依為譯翻文中, 現實來 IoC 於賴依) (件組讓,面介象抽留保「:是義意的入注賴依 C omponent 來面介象抽過藉,時係關賴依生發件物的際實它其與要件組當,面介象抽 」。件 物 際 實 的 賴 依 入 注 :式方現實本基種三了到談中章文的 在入注賴依 Martin Fowler 稱 別 分 並。 Interface injection 與 、 S etter injection Constructor injection 。 Type 1 IoC 與 、 T ype 2 IoC 為其 Type 3 IoC Type 2 IoC 、 T ype 3 IoC 是的現實所 的到提所中節小個一前在 Business Type 2 IoC也 ( 過透,Setter 而,件物的賴依所入注)法方 setXXX 是就 Type 3 IoC 式構建在是則, :如例,係關賴依入注上) C onstructor ( public class BusinessObject { private IDeviceWriter writer; public BusinessObject(IDeviceWriter writer) { this.writer = writer; } public void save() { .... writer.saveToDevice(); } } 1 14
  • 15. Chapter 1 識認 Spring 用 使 您 許 允 也 但,) Spring 是就也( Setter injection 用 使 勵鼓 Type 2 IoC 完來 是或 Constructor injection用 使 要。) T ype 3 Ioc ( Setter Constructor 好的件物賴依入注法方構建用使,定而求需的您視全完,入注係關賴依成 果如而然,立建的係關賴依成完併一,時同的件物構建在以可,是一之處 用使時這,數參的串長一告宣上式構建在須必則,多很係關件物的立建要 稱名法方的確明有 Setter 為 因,擇 選 的 錯 不 個 是 會 係 關 賴 依 入 注 來 Setter 須 必 比 會,稱 名 的 樣 這 用 使,型 類 或 用 作 的 件 物 入 注 解 瞭 於 用 可 setXXX() 。好得來要件物的表代所置位數參個某,上法方構建詢查或憶記 Type 1 IoC 物,面介作實求要會時 Type 1 IoC 用使, 是 Interface injection Type 1 IoC 可以所,法方的定規所上面介道知器容,面介個這用使會也器容的在所件 個一告宣中 的器容如例,入注的係關賴依成完來件物的面介作實叫呼 API IDependency : public interface IDependency { public void createDependency(Map dependObjects); } 讓,著接 Business 作實別類 IDependency :面介 public class Business implement IDependency { private Map dependObjects; // 件物的賴依所錄記以用 public void createDependency(Map dependObjects) { this.dependObject = dependObjects; // 與現實邊這在 與現實邊這在 與現實邊這在 Business 係關賴依的 係關賴依的 係關賴依的 ...... } public void save() { .... writer.saveToDevice(); } } 1 1
  • 16. 1 16 。性 靠 可 的 式 程 用 應 升 提幅大以可更,架框的熟成類這 Spring 過透,度程合耦的間之件物了低降 、寫撰式程的量大了少減僅不這, ) BusinessFactory 的前之如(係關賴依的 間之件物些這立建行自來式程些一寫撰地特必不您,係關賴依的間之件物 立 建 您 為 ,定 設 的 檔 態 組 據 根 期 時 行 執 在 Spring 讓,)案檔 個 .properties 一是或案檔 XML 個一(案檔態組寫撰過透,式方的式構建或 Setter 用以可並,期週命生的件物理管以可,器容 個是心核的 IoC Spring 。性用重的件 組低降而因,)架框(器容於依相件組或式程用應得使會,入注賴依現實 來 它 用使 ,性 入 侵 的 強較有 具 說 來 件 組 或 式 程 用 應 對 Type 1 IoC 以所 。 離 脫 中 器容從 法 無 件 組 得 使 後 最 ,雜複加更會賴依的)架框(器容與件組,面介的雜複多更生產將中係關 賴依的雜複更在,式方作實的樣這想想。)份部式程的面介 IDependency 作實改修是就也(式程改修須必就,中之架框或器容的它其至器容個這前 目離脫算打 Business 後日果如, 的器容於賴依 API Business 得使就這,面 介的定規所器容現實 Business 求要 Type 1 IoC 於由,中子例的面上在 。立建的係關賴 依成完來法方 createDependency() 的 件 物 理 管 被 行 執 會 器 容,件 物 理 管 來 器 容 讓 並,面介 IDependency 現 實 須 必,件 物 的 入 注 係 關 賴 依 成 完 要 果 如 ) – http://openhome.cc 良信林(冊手術技 Spring 2.0
  • 17. 1 17 件物的要想所您給會器容,器容叫呼要不 1.2 圖 。 用使中 Spring IDE Eclipse 在何如解了並,式程 個一第寫撰中 Spring Eclipse 在何如紹介將先首,念 觀的到紹介節章個這在個各會體,中用使與定設的 從接直將,始開 Spring 節章個一下從,邊這到談先就念概及語術的識認需所 門入於關 Spring 1.4 接下來的主題 Spring 識認 Chapter 1