最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

Spring-aop

2020-07-31 16:54 作者:某個(gè)峙祁  | 我要投稿

Spring 中的 AOP
1: AOP 相關(guān)術(shù)語
Joinpoint(連接點(diǎn)):
所謂連接點(diǎn)是指那些被攔截到的點(diǎn)。在 spring 中,這些點(diǎn)指的是方法,因?yàn)?spring 只支持方法類型的 連接點(diǎn)。

Pointcut(切入點(diǎn)):
所謂切入點(diǎn)是指我們要對哪些 Joinpoint 進(jìn)行攔截的定義。

Advice(通知/增強(qiáng)):
所謂通知是指攔截到 Joinpoint 之后所要做的事情就是通知。
通知的類型:前置通知,后置通知,異常通知,最終通知,環(huán)繞通知。

Introduction(引介):
引介是一種特殊的通知在不修改類代碼的前提下, Introduction 可以在運(yùn)行期為類動態(tài)地添加一些方 法或 Field。

Target(目標(biāo)對象):
代理的目標(biāo)對象。

Weaving(織入):
是指把增強(qiáng)應(yīng)用到目標(biāo)對象來創(chuàng)建新的代理對象的過程。 spring 采用動態(tài)代理織入,而 AspectJ 采用編譯期織入和類裝載期織入。

Proxy(代理):
一個(gè)類被 AOP 織入增強(qiáng)后,就產(chǎn)生一個(gè)結(jié)果代理類。

Aspect(切面): 是切入點(diǎn)和通知(引介)的結(jié)合。

##環(huán)境搭建

<dependencies>
? ? ? ?<dependency>
? ? ? ? ? ?<groupId>org.springframework</groupId>
? ? ? ? ? ?<artifactId>spring-context</artifactId>
? ? ? ? ? ?<version>5.2.3.RELEASE</version>
? ? ? ?</dependency>
? ? ? ?<dependency>
? ? ? ? ? ?<groupId>org.aspectj</groupId>
? ? ? ? ? ?<artifactId>aspectjweaver</artifactId>
? ? ? ? ? ?<version>1.9.5</version>
? ? ? ?</dependency>
? ?</dependencies>

##配置步驟
###第一步:創(chuàng)建 spring 的配置文件并導(dǎo)入約束
```xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
? ? ? xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
? ? ? xmlns:aop="http://www.springframework.org/schema/aop"
? ? ? xsi:schemaLocation="http://www.springframework.org/schema/beans
? ? ? ?http://www.springframework.org/schema/beans/spring-beans.xsd
? ? ? ?http://www.springframework.org/schema/aop
? ? ? ?http://www.springframework.org/schema/aop/spring-aop.xsd">

</beans>
```
### 第二步:把通知類用 bean 標(biāo)簽配置起來
? ?<!--日志-->
? ?<bean id="logger" class="com.tc51.util.Logger"></bean>
###第三步::使用 aop:config 聲明 aop 配置
aop:config:
作用:用于聲明開始 aop 的配置
? ?<aop:config>
? ? ?<!-- 配置的代碼都寫在此處 -->
? </aop:config>
###第四步:使用 aop:aspect 配置切面
aop:aspect:
作用:
? 用于配置切面。
屬性:
? id:給切面提供一個(gè)唯一標(biāo)識。
? ref:引用配置好的通知類 bean 的 id。
<aop:aspect id="txAdvice" ref="txManager">
? <!--配置通知的類型要寫在此處-->
</aop:aspect>

###第五步:使用 aop:pointcut 配置切入點(diǎn)表達(dá)式
aop:pointcut:
作用:
? 用于配置切入點(diǎn)表達(dá)式。就是指定對哪些類的哪些方法進(jìn)行增強(qiáng)。
屬性:
? expression:用于定義切入點(diǎn)表達(dá)式。
? id:用于給切入點(diǎn)表達(dá)式提供一個(gè)唯一標(biāo)識
<aop:pointcut expression="execution(
? public void com.tc51.service.impl.AccountServiceImpl.transfer(
java.lang.String, java.lang.String, java.lang.Float)
)" id="pt1"/>

###第六步:使用 aop:xxx 配置對應(yīng)的通知類型
aop:before
作用:
? 用于配置前置通知。指定增強(qiáng)的方法在切入點(diǎn)方法之前執(zhí)行
屬性:
? method:用于指定通知類中的增強(qiáng)方法名稱
? ponitcut-ref:用于指定切入點(diǎn)的表達(dá)式的引用
? poinitcut:用于指定切入點(diǎn)表達(dá)式
執(zhí)行時(shí)間點(diǎn):
? 切入點(diǎn)方法執(zhí)行之前執(zhí)行
<aop:before method="beginTransaction" pointcut-ref="pt1"/>
?
aop:after-returning
作用:
? 用于配置后置通知
屬性:
? method:指定通知中方法的名稱。
? pointct:定義切入點(diǎn)表達(dá)式
? pointcut-ref:指定切入點(diǎn)表達(dá)式的引用
執(zhí)行時(shí)間點(diǎn):
? 切入點(diǎn)方法正常執(zhí)行之后。它和異常通知只能有一個(gè)執(zhí)行
? ? ?<aop:after-returning method="commit" pointcut-ref="pt1"/>
? ? ? ?
aop:after-throwing
作用:
? 用于配置異常通知
屬性:
? method:指定通知中方法的名稱。
? pointct:定義切入點(diǎn)表達(dá)式
? pointcut-ref:指定切入點(diǎn)表達(dá)式的引用
? 執(zhí)行時(shí)間點(diǎn):
切入點(diǎn)方法執(zhí)行產(chǎn)生異常后執(zhí)行。它和后置通知只能執(zhí)行一個(gè)
<aop:after-throwing method="rollback" pointcut-ref="pt1"/>
?
aop:after
作用:
? 用于配置最終通知
屬性:
? method:指定通知中方法的名稱。
? pointct:定義切入點(diǎn)表達(dá)式
? pointcut-ref:指定切入點(diǎn)表達(dá)式的引用
執(zhí)行時(shí)間點(diǎn):
? 無論切入點(diǎn)方法執(zhí)行時(shí)是否有異常,它都會在其后面執(zhí)行。
<aop:after method="release" pointcut-ref="pt1"/>

##環(huán)繞通知
```xml

<aop:config>
? <aop:pointcut expression="execution(* com.itheima.service.impl.*.*(..))"
id="pt1"/>
? ? ?<aop:aspect id="txAdvice" ref="txManager">
? ? ?<!-- 配置環(huán)繞通知 -->
? ? ?<aop:around method="transactionAround" pointcut-ref="pt1"/>
? </aop:aspect>
</aop:config>

```

```java

public class Logger {

? ?public void log() {
? ? ? ?System.out.println("記錄日志...");
? ?}

? ?/**
? ? * 環(huán)繞通知
? ? *
? ? * @param pjp spring 框架為我們提供了一個(gè)接口:ProceedingJoinPoint,它可以作為環(huán)繞通知的方法參數(shù)。
? ? * ? ? ? ? ? ?在環(huán)繞通知執(zhí)行時(shí),spring 框架會為我們提供該接口的實(shí)現(xiàn)類對象,我們直接使用就行。
? ? * @return
? ? */


? ?public Object log2(ProceedingJoinPoint joinPoint) {
? ? ? ?Object proceed = null;
? ? ? ?try {
? ? ? ? ? ?//獲取方法執(zhí)行所需的參數(shù)
? ? ? ? ? ?Object[] args = joinPoint.getArgs();
? ? ? ? ? ?proceed = joinPoint.proceed(args);
? ? ? ?} catch (Throwable throwable) {
? ? ? ? ? ?throwable.printStackTrace();
? ? ? ?} finally {
? ? ? ?}
? ? ? ?System.out.println("環(huán)繞記錄日志...");
? ? ? ?return proceed;
? ?}
}

```








Spring-aop的評論 (共 條)

分享到微博請遵守國家法律
哈密市| 河曲县| 凌源市| 五台县| 辽宁省| 宾阳县| 虎林市| 江孜县| 巴东县| 沁水县| 米泉市| 疏勒县| 万源市| 阿克陶县| 东山县| 中江县| 湘潭市| 尚志市| 舟山市| 黑河市| 潢川县| 钟祥市| 天峨县| 张家口市| 永定县| 桦川县| 山丹县| 阜康市| 固镇县| 青海省| 泰兴市| 平顶山市| 莱芜市| 随州市| 武穴市| 桦甸市| 壤塘县| 环江| 商河县| 湘乡市| 永修县|