Spring原理
spring的最大作用ioc/di,將類與類的依賴關(guān)系寫在配置文件中,
程序在運(yùn)行時(shí)根據(jù)配置文件動(dòng)態(tài)加載依賴的類,
降低的類與類之間的藕合度。
它的原理是在applicationContext.xml加入bean標(biāo)簽,
在bean標(biāo)簽中通過class屬性說明具體類名,
通過property標(biāo)簽說明該類的屬性名,
通過constructor-args說明構(gòu)造子的參數(shù)。
其一切都是返射,當(dāng)通過applicationContext.getBean("id名稱")得到一個(gè)類實(shí)例時(shí),
就是以bean標(biāo)簽的類名、屬性名、構(gòu)造子的參數(shù)為準(zhǔn),
通過反射實(shí)例對(duì)象,喚起對(duì)象的set方法設(shè)置屬性值,
通過構(gòu)造子的newInstance實(shí)例化得到對(duì)象。
正因?yàn)閟pring一切都是反射,反射比直接調(diào)用的處理速度慢,
所以這也是spring的一個(gè)問題。
spring第二大作用就是aop,其機(jī)理來自于代理模式,
代理模式有三個(gè)角色分別是通用接口、代理、真實(shí)對(duì)象代理、
真實(shí)對(duì)象實(shí)現(xiàn)的是同一接口,將真實(shí)對(duì)象作為代理的一個(gè)屬性,
向客戶端公開的是代理,當(dāng)客戶端調(diào)用代理的方法時(shí),
代理找到真實(shí)對(duì)象,調(diào)用真實(shí)對(duì)象方法,
在調(diào)用之前之后提供相關(guān)的服務(wù),如事務(wù)、安全、日志。
其名稱分別是代理、真實(shí)對(duì)象、裝備、關(guān)切點(diǎn)、連接點(diǎn)。
主要是可擴(kuò)展性。如果現(xiàn)在你的客戶覺得訪問效率太低,程序不用hibernate了,
要使用jdbc,比如:UserDaoHibernateImpl(原來),現(xiàn)在修改為UserDaoJdbcImpl.
這個(gè)時(shí)候你要怎么辦?直接去修改源代碼?你原來不用接口進(jìn)行引用,肯定是new 了一個(gè)
UserDaoHibernateImpl出來,如果多個(gè)地方都用到,你不但要去修改源代碼,還要修改很多地方,
而是用spring的依賴注入呢,你只需要修改下配置,把bean的class屬性給修改下,換下配置什么的
就可以了,降低后期維護(hù)成本
因?yàn)閣eb應(yīng)用大了,servletClass多了,所以用到struts來減輕我們的負(fù)擔(dān),使得模塊更清晰,和更利于復(fù)用和管理。
因?yàn)閣eb應(yīng)用大了,表、字段多了,寫sql語句會(huì)寫死人,且比較容易出錯(cuò),所以用到hibernate來獲得它給我們的面向?qū)ο蟛僮鲾?shù)據(jù)庫的服務(wù),省去了寫n多sql的煩心事,且使我們的程序更加面向?qū)ο?
因?yàn)檫壿嫼徒M件模塊多了,因?yàn)閷佣嗔耍谑俏覀兛紤]整一個(gè)spring,一來包裝hibernate,提供更簡(jiǎn)便的服務(wù)接口及更易于管理的事務(wù)服務(wù),二來代理了我們的服務(wù)層和dao層,使得這兩層與實(shí)際的控制單元的關(guān)系變成ioc框架來管理,任何一方的修改都不會(huì)牽扯到雙方都要修改的問題。總之spring就是把雜亂的dao、service、action給串了起來,變成了一個(gè)個(gè)可在程序外控制的模塊,使其可以自由的組合在一起,即可獲得想要的服務(wù)也不用煩他們之間的關(guān)系。
CopyRight@BUG
posted on 2009-11-20 16:24 seanchang 閱讀(452) 評(píng)論(0) 編輯 收藏