深入認識Spring兩大特性IOC和AOP

2021-10-22 21:13:42 字數 3601 閱讀 7853

眾所周知,spring有兩大特性:ioc和aop。

ioc:英文全稱是inversion of control,意為控制反轉/依賴注入。

aop:英文全稱是aspect-oriented programming,意為面向切面程式設計。

總的來說,spring是乙個輕量級的控制反轉(ioc)和面向切面程式設計(aop)的容器框架.

註解名稱

備註@controller

標註控制層

@service

標註服務層

@component

標註此類是spring管理的元件

@autowired

按型別自動裝配

@resource

按名稱自動裝配

通常我們例項化乙個物件時,都是使用類的構造方法new乙個物件,這個過程是我們自己來控制的,而ioc是把new物件的工作交給了spring容器。

依賴注入

spring依賴注入的方式主要有4個:基於註解注入方式、set注入方式、構造器注入、靜態方法注入。目前大都使用的是註解注入,配置少,比較方便。

控制層

@controller

public class userscontroller

我們可以使用@autowired或@resource來裝配bean,它們的區別在於:

@autowired預設按型別自動裝配,預設要求依賴物件必須存在,如果要允許為null,需設定required = false

@controller

public class userscontroller

@resource預設按名稱自動裝配,名稱可以通過name屬性來指定,如果不指定,當註解寫在字段上,預設取欄位名進行裝配;

如果寫在setter方法上,預設取屬性名進行裝配。當找不到與名稱相匹配的bean時,會按照型別進行裝配。

服務層

@service

public class usersserviceimpl implements usersservice

面向切面程式設計,通俗的講共有功能的實現。

比如:每個介面都會呼叫方法,我們想記錄這些呼叫返回的資訊,不需要每乙個都進行日誌或其他方式記錄,通過aop的概念,處理一次即可。

註解名稱

備註@before

前置通知,在方法呼叫前執行

@after

後置通知,在方法呼叫後執行

@around

環繞通知,包裹了被通知的方法,在被通知的方法呼叫之前之後執行自定義的行為。

@afterreturning

返回通知,目標方法成功執行後呼叫通知

@afterthrowing

異常通知,在目標方法丟擲異常後呼叫通知

任意公共方法的執行: 

execution(public * *(..))

任何乙個以「set」開始的方法的執行:

execution(* set*(..))

accountservice 介面的任意方法的執行:

execution(* com.xyz.service.accountservice.*(..))

定義在service包裡的任意方法的執行:

execution(* com.xyz.service.*.*(..))

定義在service包和所有子包裡的任意類的任意方法的執行:

execution(* com.xyz.service..*.*(..))

第一步:引入依賴

org.springframework.boot

spring-boot-starter-aop

建立乙個類

@log4j2

@aspect

@component

public class aoptest

/*** 前置通知

* @param joinpoint

*/@before("aoptest()")

public void dobefore(joinpoint joinpoint)",joinpoint.getsignature().getname());

listparams=arrays.aslist(joinpoint.getargs());

log.info("輸入引數為:{}",params);

}/**

* 後置通知

* @param joinpoint

*/@after("aoptest()")

public void doafter(joinpoint joinpoint)",joinpoint.getsignature().getname());}}

寫乙個get的測試方法

輸入引數在進行輸出,呼叫檢視下效果

接下來重點介紹下@around,環繞通知,該方法可以包含@before、@after、@afterthrowing、@afterrunning。

環繞通知的功能最全面,需要攜帶proceedingjoinpoint 型別的引數,且必須有返回值,返回值為目標方法的返回值。

示例如下:

/**

* 環繞通知

* @param joinpoint

* @return

*/@around("aoptest()")

public object doaround(proceedingjoinpoint joinpoint),方法引數:{}",methodname,arrays.aslist(joinpoint.getargs()));

//執行目標方法

try ",result);

} catch (throwable throwable) ",methodname);

throwable.printstacktrace();

}//4.後置通知

log.error("後置通知*****>{}",methodname);

return result;

}

呼叫方法

可以看到環繞通知包含了4中通知方法

至此spring的兩大特性就介紹完了。

如果您覺得有用,記得關注下哦。

深入理解Spring的兩大特徵(IOC和AOP)

1.降低了元件之間的耦合性 實現了軟體各層之間的解耦 2.可以使用容易提供的眾多服務,如事務管理,訊息服務等 3.容器提供單例模式支援 4.容器提供了aop技術,利用它很容易實現如許可權攔截,執行期監控等功能 5.容器提供了眾多的輔助類,能加快應用的開發 6.spring對於主流的應用框架提供了整合...

django中queryset的兩大特性

roles roleinfo.objects.all 建立查詢集的時候,是不會訪問資料庫的,直到真正的呼叫資料的時候,才會訪問資料庫,所以 roles roleinfo.objects.all 沒有真正的進行資料庫查詢的,只是建立了乙個資料庫查詢集 呼叫資料,真正的使用資料 1 迭代 2 序列化 3...

spring兩大核心之一(ioc)

spring兩大核心之一 ioc ioc 控制反轉,依賴注入。將物件的管理權交給sping工廠管理,也就是說從以前的new物件 建立物件 到現在的將物件交給spring工廠通過配置或掃瞄 建立物件 顧名思義 就是換種方式建立物件。使用依賴注入能更好的使模組之間解耦。案例 person person ...