Spring原理
spring的最大作用ioc/di,將類與類的依賴關系寫在配置文件中,
程序在運行時根據配置文件動態加載依賴的類,
降低的類與類之間的藕合度。
它的原理是在applicationContext.xml加入bean標簽,
在bean標簽中通過class屬性說明具體類名,
通過property標簽說明該類的屬性名,
通過constructor-args說明構造子的參數。
其一切都是返射,當通過applicationContext.getBean("id名稱")得到一個類實例時,
就是以bean標簽的類名、屬性名、構造子的參數為準,
通過反射實例對象,喚起對象的set方法設置屬性值,
通過構造子的newInstance實例化得到對象。
正因為spring一切都是反射,反射比直接調用的處理速度慢,
所以這也是spring的一個問題。
spring第二大作用就是aop,其機理來自于代理模式,
代理模式有三個角色分別是通用接口、代理、真實對象代理、
真實對象實現的是同一接口,將真實對象作為代理的一個屬性,
向客戶端公開的是代理,當客戶端調用代理的方法時,
代理找到真實對象,調用真實對象方法,
在調用之前之后提供相關的服務,如事務、安全、日志。
其名稱分別是代理、真實對象、裝備、關切點、連接點。
主要是可擴展性。如果現在你的客戶覺得訪問效率太低,程序不用hibernate了,
要使用jdbc,比如:UserDaoHibernateImpl(原來),現在修改為UserDaoJdbcImpl.
這個時候你要怎么辦?直接去修改源代碼?你原來不用接口進行引用,肯定是new 了一個
UserDaoHibernateImpl出來,如果多個地方都用到,你不但要去修改源代碼,還要修改很多地方,
而是用spring的依賴注入呢,你只需要修改下配置,把bean的class屬性給修改下,換下配置什么的
就可以了,降低后期維護成本
因為web應用大了,servletClass多了,所以用到struts來減輕我們的負擔,使得模塊更清晰,和更利于復用和管理。
因為web應用大了,表、字段多了,寫sql語句會寫死人,且比較容易出錯,所以用到hibernate來獲得它給我們的面向對象操作數據庫的服務,省去了寫n多sql的煩心事,且使我們的程序更加面向對象
因為邏輯和組件模塊多了,因為層多了,于是我們考慮整一個spring,一來包裝hibernate,提供更簡便的服務接口及更易于管理的事務服務,二來代理了我們的服務層和dao層,使得這兩層與實際的控制單元的關系變成ioc框架來管理,任何一方的修改都不會牽扯到雙方都要修改的問題。總之spring就是把雜亂的dao、service、action給串了起來,變成了一個個可在程序外控制的模塊,使其可以自由的組合在一起,即可獲得想要的服務也不用煩他們之間的關系。
CopyRight@BUG