說到Spring就得提到它的作者“Rod Johnson”,2002年他編寫了《Expert One-on_One java EE設計與開發》一書。在書中,它對傳統的java EE技術日益臃腫和低效提出了質疑,他覺得應該有更便捷的做法,於是提出了Interface 21,也就是Spring框架的雛形。他提出了技術以實用為准的主張,引發了人們對“正統”java EE的反思。2003年2月Spring框架正式成為一個開源項目,並發布於SourceForge。
Spring致力於java EE應用的各種解決方案,而不是僅僅專注於某一層的方案。可以說Spring是企業應用開發的“一站式”選擇,但Spring並不想取代那些已有的框架,而是以高度的開放性與他們無縫整合。
Spring框架大約有20個功能模塊組成。這些模塊被分成6個部分,分別是:Core Container、DataAccess/Integration、Web、AOP(Aspect Oriented Programming)、Instrumentation及Test。
Spring Core 是框架的基礎部分,提供了IOC特性。Spring Context為企業級開發提供了便利和集成的工具。Spring AOP是基於Spring Core的符合規范的面向切面編程的實現。Spring JDBC提供了JDBC的抽象層,簡化了JDBC編碼,同時使代碼更健壯。Spring ORM部分對Hibernate等ORM框架提供了支持。Spring Web 為Spring在Web應用程序中的使用提供了支持。
控制反轉(Inversion of Control,Ioc),也被稱為依賴注入(Dependency Injection,DI),是面向對象編程的一種設計理念,用來減低程序代碼的耦合度。
什麼是依賴?
依賴在代碼中一般指通過局部變量、方法參數、返回值等建立的對於其他對象的調用關系,例如A類的方法中,實例化了B類的對象並調用其他方法已完成特定的功能,我們就說A類依賴於B類。簡單說就是如果A類想要完成某種特定功能必須要使用到B類的實例或方法那我們就說A類依賴於B類。
幾乎所有的成序都是由兩個或更多的類通過彼此合作來實現完整的功能,類與類之間的依賴關系增加的系統開發的復雜程度,我們開發一個類的時候,還要考慮對正在使用該類的其他類的影響。從而導致了系統不具備良好的擴展性和可維護性,甚至在開發中難以進行測試。這時我們就要使用到控制反轉了。最簡單的控制反轉的體現就是《設計模式》中的簡答工廠模式了,在該模式中A類依賴於B類對象,但A類並不直接使用代碼去創建B類對象而是將這一工作交給了C類去完成,從而降低了A類與B類之間的耦合度。這樣使用工廠類雖然可以降低類與類之間的耦合度但是大量的工廠類被引入項目明顯增減的開發的工作量。而Spring能夠替我們完成這項額外的工作,為我們提供了完整的Ioc實現,讓我們得以專注於業務類的設計。好了讓我們通過一個小demo來了解一下Spring IOC如何使用吧!
1.下載Spring 並添加到項目中。
2.編寫配置文件。
3.編寫代碼獲取HelloSpring實例。
面向切面編程(Aspect Oriented Programming,AOP)是軟件編程思想發展到一定階段的產物,是面向對象編程的有益補充。AOP一般使用與具有橫切邏輯的場合,如訪問控制、事務管理、性能檢測等。像這些穿插在既定業務中的通用操作,如日志記錄等,就是所謂的“橫切邏輯”,也稱為切面。當我們要增加或減少橫切邏輯的時候還要修改業務方法中的相應代碼。我們希望無需在業務方法中顯示編寫這些通用的代碼,在需要的時候系統能自動幫我們調用所需的功能代碼,這正是AOP要解決的主要問題。
面向切面編程,簡單的來說就是在不改變源程序的基礎上為代碼段增加新的功能,對代碼段進行曾強處理。它的設計思想來源於代理模式,其主要有以下兩點:
1.在項目中添加SpringAOP相關的jar文件
2.編寫前置增強和後置增強實現日志功能
3.編寫Spring配置文件,對業務方法進行增強處理
4.編寫代碼獲取帶有增強處理的業務對象
最終程序運行結果: