框架入門——名詞解釋

爲什麼要學習SSM框架

當前輕量級Java EE應用開發通常會採用兩種方式:一種是以SSH(Struts+Spring+Hirernate)框架爲核心的組合方式,

另一種是以SSM(Spring+Spring MVC+MyBatis)框架爲核心的組合方式。使用這兩種組合方式的項目都使Java EE架構具有高度的可維護性和可拓展性,同時極大地提高了項目的開發效率,降低了開發和維護的成本,因此,這兩種組合方式已成爲當前各個企業項目開發的首選。

兩種組合框架的相同點在於都以Spring框架爲核心,而兩者的主要不同之處在於MVC的實現方式(Struts與Spring MVC),以及ORM持久化方面(Hibernate與Mybatis)。SSH較注重配置開發,其中的Hibernate對JDBC的完整封裝更加面向對象,對增刪改查的數據維護更自動化,但SQL優化方面較弱,學習門檻稍高;SSM更注重註解式開發,且ORM實現更加靈活,SQL優化更簡便,學習容易入門。目前來說,傳統企業項目的開發,使用SSH框架較多,而對性能要求較高的互聯網項目,通常會選擇SSM框架。

什麼是Spring

Spring是一個分層一站式輕量級開源框架,它以IoC(控制反轉)AOP(面向切面編程)爲內核,使用基本的JavaBean來完成以前只可能由EJB(Enterprise Java Beans,Java企業Bean)完成的工作,取代了EJB的臃腫、低效的開發模式。

Spring致力於Java EE應用各層的解決方案,在表現層它提供了Spring MVC以及與Struts框架的整合功能;在業務邏輯層可以管理事務、記錄日誌等;在持久層可以整合MyBatis、Hibernate、JdbcTemplate等技術。因此,可以說Spring是企業應用開發很好的“一站式”選擇。雖然Spring貫穿於表現層、業務邏輯層和持久層,但它並不想取代那些已有的框架,而是以高度的開放性與它們進行無縫整合。

依賴注入

依賴注入與控制反轉的含義相同,是從兩個角度描述的同一個概念。

當某個JAVA對象(調用者)需要調用另一個JAVA對象(被調用者,即被依賴對象)時:

傳統模式下,調用者會採用"new 被調用者"的代碼方式來創建對象,

這種方式導致了調用者與被調用者之間的耦合性增加,不利於後期項目的升級和維護。

使用Spring時,對象的實例不再由調用者來創建,而是由Spring容器來創建,Spring容器會負責控制程序之間的關係,而不是由調用者的程序代碼直接控制。這樣,控制權就由應用代碼轉移到了Spring容器,控制權發生了反轉,這就是Spring的控制反轉

從Spring容器的角度來看,Spring容器負責將被依賴對象賦值給調用者的成員變量,這相當於爲調用者注入了它依賴的實例,這就是Spring的依賴注入

面向切面編程(AOP)

AOP是面向對象編程(OOP)的一種補充,目前已成爲一種比較成熟的編程方式。

在傳統的業務處理代碼中,通常都會進行事務處理、日誌記錄等操作。雖然使用OOP可以通過組合或者繼承的方式來達到代碼的重用,但如果要實現某個功能(如日誌記錄),同樣的代碼仍然會分散到各個方法中。這樣,如果想要關閉某個功能,或者對其進行修改,就必須要修改所有的相關方法。這不但增加了開發人員的工作量,而且提高了代碼的出錯率。

爲了解決這一問題,AOP思想隨之產生。AOP採用橫向抽取機制,將分散在各個方法的重複代碼提取出來,然後在程序編譯或運行時,再將這些提取出來的代碼應用到需要執行的地方。這種採用橫向抽取機制的方式,採用傳統的OOP思想顯然是無法辦到的,因爲OOP只能實現父子關係的縱向的重用。雖然AOP是一種新的編程思想,但卻不是OOP的替代品,它只是OOP的延伸和補充。

AOP的使用,使開發人員在編寫業務邏輯時可以專心於核心業務,而不必過多地關注於其他業務邏輯的實現這不但提高了開發效率,而且增強了代碼的可維護性。

目前最流行的AOP框架有兩個,分別爲Spring AOP和AspectJ。Spring AOP使用純Java實現,AspectJ是一個基於Java的AOP框架。

動態代理

AOP的實現原理就是動態代理。

動態代理和靜態代理的區別是,靜態代理的的代理類是我們自己定義好的,在程序運行之前就已經變異完成,但是動態代理的代理類是在程序運行時創建的。相比於靜態代理,動態代理的優勢在於可以很方便的對代理類的函數進行統一的處理,而不用修改每個代理類中的方法。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章