PS--很多例子圖片上傳不了,留給自己看吧—_—
Spring的誕生是爲了滿足企業級系統的一些需求,那麼,企業級系統有那些特點,spring究竟帶來了那些好處呢
1巨大而複雜的規格說明:對於一個複雜的分佈式系統,有一個文檔進行說明是一件很合理的事情。但是,並不是所有的文檔信息都是真正必需的,EJB的文檔反而成了一個非常不便利的工具。
2龐大的文件,複雜的業務:開發設計一個項目之前,通常需要閱讀1000多頁的需求說明書文檔。這是部署EJB時非常痛苦的事情。
3增加程序調試時間:制定EJB解決方案比遠比使用普通的Java代碼所需的時間長,調試EJB程序也比調試普通的Java代碼所需要的時間也長。主要原因是我們不知道bug是出在代碼本身還是出在容器上。
4EJB代碼更加複雜:舉個例子,爲了實現一個sessionbean,必須寫三個類,爲了實現一個實體bean,要寫四個類。增加幾個部署描述語句,比如說最簡單的“Helloworld”程序需要10個文件,而不是一個文件。
5重複設計的危險:導致這種結果的原因是複雜的文檔所致。。如果你沒有完全理解EJB的概念,你就不會很好的駕奴它,讓它你所用,反之爲你所累。
6維護困難:EJB是一個不斷更新的技術,在新技術不斷推出的時候,代碼需要升級,這就就需要額外的努力和成本來使你的程序和新的EJB容器兼容。
7學習比較難,開發難度大
8 依賴應用服務器
9 運用大量的設計模式
引入spring之後,spring的依賴注入可以統一管理和生成javabean,哪有需要調用就往哪注入,這種方式大大降低了開發難度,
降低了代碼的耦合度,給後期的維護也帶來了方便
同時spring的aop還能將系統中那些類似於日誌管理,事務管理等分佈性比較強,但又必須有的代碼集中生成,無需開發人員關注,提高工作效率。
Spring一共有十幾個組件,但是真正的核心組件只有幾個,Spring框架的總體架構圖,瞭解一下他的體系結構。
從這個圖中可以看出Spring框架的核心組件只有三個:Core、Context和Beans。他們構建起了整個Spring的骨骼架構,沒有他們就不可能有AOP、Web等上層的特性功能。
上面這些是Spring特性功能。。比較重要的幾個包:AOP包(主要提供面向切面編程的實現),Web(主要提供了Web應用開發的支持及針對Web應用的MVC思想實現)、
ORM(對象關係映射,爲Mybatis這類持久化框架提供支持)、還有SpringMVC(這個是它自帶的一個web視圖層,可以替代到Sturts2)。。等等,其中最最核心的就是AOP和下面Spring核心包。
使用IoC解耦合
實現步驟一:
1.創建工程並添加Spring支持
2.創建業務層和數據訪問層接口
3.編寫業務層和數據訪問層實現類
4.在業務實現類中添加DAO接口引用和相關訪問器,注意JavaBean命名規範
關鍵代碼:
private UserDao userDao;//userDao屬性的setter訪問器,會被Spring調用,實現設值注入
public void setUserDao(UserDao userDao){
this..userDao = userDao;}
實現步驟二:
1.編寫Spring配置文件,完成業務層和數據訪問層組件的定義和裝配
關鍵代碼:
<bean id="userDao" class="dao.impl.UserDaoImpl" />
<bean id="userService" class=“service.impl.UserServiceImpl">
<property name="dao">
<ref bean="userDao" />
</property>
</bean>
通過ApplicationContext接口的實現類獲取組件關鍵代碼:
ApplicationContext ac = newClassPathXmlApplicationContext(
"applicationContext.xml");
UserService = (UserService )ac.getBean("userService ");
----------------------------------------------------------------------------------------------------------------
AOP是一種思想,它與具體實現技術無關,任何一種符合AOP的思想的技術實現,都可以看做是AOP的實現。通過java的動態代理機制,就可以很容易實現AOP思想,實際上Spring的AOP也是建立在java代理機制上。
AOP實際上是由目標類的代理類實現的。AOP代理其實是由AOP框架動態生成的一個對象,該對象可作爲目標對象使用。AOP代理
包含了目標對象的全部方法,但是AOP代理中的方法與目標對象的方法存在差異,AOP方法是在特定切入點添加了增強處理,並回調了
目標對象的方法。
---總結對AOP的理解:
業務處理的主要流程就是核心關注點,與之關係不大的部分就是橫切關注點。橫切關注點的一個特點是:他們經常發生在覈心關注
點的多處,而各處基本相似,比如權限認證、日誌、事務處理。AOP的作用在於分離系統中的各種關注點,將核心關注點和橫切
關注點分離開來。
所謂面向切面編程:是一種通過預編譯和運行期動態代理的方式實現不在修改源代碼的情況下給程序動態添加功能的技術。
-----在Spring中使用註解定義切面:
爲項目添加AOP的annotation支持
添加目標方法和增強處理
在增強處理類中使用annotation定義切入點並織入增強處理
在Spring配置文件中添加<aop:aspectjautoproxy/>元素
---------------------------------------------------------------------------------------------------
-----在Spring中實現AOP步驟(老方法):
1.爲項目添加Spring的AOP支持
2.編寫目標方法和增強處理:
3.在Spring配置文件中定義切入點:
4.在切入點織入增強處理:
5.獲取鏈接點信息:
--UserServiceLogger類中定義了before()和afterReturning()兩個方法。我們希望把before( )方法作爲前置增強使用,即將該方法添加到目標方法之前執行;
afterReturning( )方法作爲後置增強使用,即將該方法添加到目標方法正常返回之後執行。這裏以前置增強和後置增強爲例。
爲了能夠在增強方法中獲得當前連接點的信息,以便實施相關的判斷和處理,可以在增強方法中聲明一個JoinPoint類型的參數,Spring會自動注入該實例。
通過該實例的getTarget()方法可以得到被代理的目標對象,getSignature()方法返回被代理的目標方法,getArgs()方法返回傳遞給目標方法的參數數組。
對於實現後置增強的afterReturning()方法,還可以定義一個參數用於接收目標方法的返回值。
增強處理類型: