Spring原理簡介

shwenwen發表於2009-07-28

簡要介紹spring的原理,並結合一個簡單的例項,如何配置使用spring。

[@more@]

在用ssh(Struts+Spring+Hibernate)實現的mvc模式中Spring是作為連線Struts和Hibernate的控制層。 與Spring框架相關的概念有以下: 輕量級:輕量級是針對重量級容器(EJB)來說的,Spring的核心包不到1M大小,而使用Spring的核心包所需的資源也很小,所以可以在小型裝置中使用。 非侵入性:所有的框架都是提供大量的功能公使用者去使用,從而簡化開發時間和成本,但由於大量的使用了框架的API,使應用程式和框架發生了大量的依賴性,無法從框架中獨立出來,更加無法使程式元件在其他程式中使用,這樣的框架叫做入侵式的框架,而Spring目標是一個非入侵式的服務框架。 容器:容器就是一個幫助你把原來自行編寫程式去管理物件關係的工作轉移給容器來做。Spring提供了容器功能,容器可以管理物件的生命週期、物件與物件之間的關係、你可以透過編寫XML來設定物件關係和初始值,這樣容器在啟動之後,所有的物件都直接可以使用,不用編寫任何編碼來產生物件。 IOC/DI:Spring最核心的概念就是IOC(反轉控制),而他的另一個名字就是DI(依賴注入);使用Spring,你不必在程式中維護物件的依賴關係,只要在xml中設定即可,Spring容器會自己根據相關的配置去產生他們之間的關係,所有的關係都是都是在容器執行的時候注入的,而他們本身是沒有關係的。打個比方:比如張三和李四,之前是沒有任何關係的兩個物件,但當他倆進入班級這個容器中後,班級這個容器就將他倆賦予了同學的關係。這樣的做法就是用容器去賦予物件之間的關係,而不是物件本身之間來建立關係。這樣做的好處顯然實現了松偶合。 AOP(Aspect Oriented Programming面向切面/方面程式設計):Spring最被人重視的另一個方面就是對AOP的支援,AOP是Spring支援的一個子容器。在一個服務流程中插入與業務邏輯無關的系統服務邏輯(如:Logging登入、Security安全等),而把這些獨立出來設計成一個物件,這樣的物件稱為Aspect。打個比方:做一次環球旅行,在旅行途中要經過若干國家的海關關口辦理出入境手續,這樣的一個一個的關口就是整個旅行流程中的一個一個的Aspect。 demo:(僅僅解釋了什麼是依賴注入DI或者叫反轉控制IOC)

1、首先看一個原來的操作 //User.java package org.myspring; public class User { private String username; private int age; public int getAge() { return age; } public void setAge(int age) { this.age = age; } public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } } //Test.java package org.myspring; public class Test { public static void main(String[] args) { User user=new User(); user.setUsername("zhangsan"); System.out.println(user.getUsername()); } } 以上是原始的做法,產生的問題是:如果想要把zhangsan改為lisi則需要在Test類中修改程式碼,這樣是一種緊耦合,改動一個類就牽扯到另外一個類。 松耦合的情況是User.java和Test.java這兩個類都不需要改動,就能實現輸出不同username屬性的效果,這就需要加入Spring的IOC/DI機制。

方法如下: 2、MyEclipse->Add Spring Capabilities...->僅加入核心包即可,這樣就生成了applicationContext.xml配置檔案

3、修改applicationContext.xml:在xml檔案的編輯頁中 右鍵->Spring->New Bean,在彈出視窗中進行如下圖的設定。 zhangsan 25

4、新的測試類 //Test.java package org.myspring; import org.springframework.context.ApplicationContext; import org.springframework.context.support.FileSystemXmlApplicationContext; public class Test { public static void main(String[] args) { ApplicationContext c FileSystemXmlApplicationContext("src/org/myspring/applicationContext.xml"); User user=(User)context.getBean("user"); System.out.println("name:"+user.getUsername()+"; age:"+user.getAge()); } } 注意:在上面的程式碼中context.getBean()返回的是一個Object物件,需要進行相應的類物件的轉換。在程式碼中沒有出現用new來例項化物件的語句,實現了Test類跟User類的松耦合。物件的例項化都在xml配置檔案中實現了。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/143526/viewspace-1024661/,如需轉載,請註明出處,否則將追究法律責任。

相關文章