控制反轉:誰控制了誰? 就是交換控制權。 1.A a =new A(); 要使用這個A 必須你去new他。控制權在a; 2.由第三方來進行創造這個A,你用的時候直接用就是。控制權在第三方。 3.其實IOC(invert of control) 就等於一個工廠模式。把我們需要的放到第三方進行操作生產, ...
控制反轉:誰控制了誰? 就是交換控制權。
1.A a =new A(); 要使用這個A 必須你去new他。控制權在a;
2.由第三方來進行創造這個A,你用的時候直接用就是。控制權在第三方。
3.其實IOC(invert of control) 就等於一個工廠模式。把我們需要的放到第三方進行操作生產,而工廠模式一般都是利用反射來new具體的對象,然後返回實例進行使用。
依賴註入就是把依賴註入進去,你現在想組裝一臺電腦,那麼你就需要顯示器、主板、鍵鼠光碟機等對象,這些對象通常是new出來的,new出來的對象和當前(this)對象就有了依賴關係。
控制反轉又稱為依賴註入,主要為了降低類之間的耦合度,類A依賴類B的時候我們按傳統寫法就需要在類A裡面調用類B對象的方法,而用spring的話,就相當於提供了一個介面,在類A裡面調用這個介面就可以得到類B對象,不用new出類B的對象來。利用介面的原理來降低了耦合度,從而實現介面與具體實現類的松耦合。
而為了實現上述原理,我們把他寫成配置文件,然後在程式運行時用反射的方式來載入這個配置文件(用spring時就是用的反射機制運行時調用),找到要使用的類,並由spring生成對象。
1 //一般我們需要斧頭去砍樹就要自己去製造斧頭:
2 private Axe axe = new Axe(); //自己製造斧頭
3 public void cut(Axe axe)
4 {
5 axe.cut();//進行砍樹
6 }
7
8 //而IOC我們需要斧頭,這個斧頭已經製造好了,我們去取就OK:
9 private Axe axe = springFactory.getBean("axe");
10 public void cut(Axe axe)
11 {
12 axe.cut();
13 }
14 //這些axe就是在spring的配置文件里聲明的bean:
15 <bean id="ss" class="A">
16 <property name="dao">
17 <ref bean="dbdao" />
18 </property
19 </bean>
AOP面向切麵
AOP:(aspect oriented program)面向切麵編程,將程式中的交叉業務邏輯(比如安全,日誌,事務等),封裝成一個切麵,然後註入到目標對象(具體業務邏輯)中去。
比如:很多方法可能會拋異常,你要記錄這個異常到日誌中去,可以寫個攔截器類,在這個類中記錄日誌,在spring.xml中配置一個對這些要記錄日誌的方法的aop攔截器,在這個方法執行後調用這個攔截器,記錄日誌。這樣就不用每次拋異常都要手動記錄日誌。
spring的事務管理用到的就是aop 這樣也可以提高程式的內聚性。比如登陸時候在進入登錄頁面前寫入日誌,登錄以後查看cookie等類似的操作,很常用的,尤其是跟資料庫有關的,或者跟支付有關的程式肯定會在每一步前面插入日誌,還有某些國際化項目會在每次跳轉時候都轉換字元集之類。
轉載鏈接:http://www.cnblogs.com/ingstyle/p/6256502.html