欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

如何使用SpringAOP進(jìn)行測(cè)試

本篇內(nèi)容主要講解“如何使用Spring AOP進(jìn)行測(cè)試”,感興趣的朋友不妨來(lái)看看。本文介紹的方法操作簡(jiǎn)單快捷,實(shí)用性強(qiáng)。下面就讓小編來(lái)帶大家學(xué)習(xí)“如何使用Spring AOP進(jìn)行測(cè)試”吧!

創(chuàng)新互聯(lián)建站憑借專業(yè)的設(shè)計(jì)團(tuán)隊(duì)扎實(shí)的技術(shù)支持、優(yōu)質(zhì)高效的服務(wù)意識(shí)和豐厚的資源優(yōu)勢(shì),提供專業(yè)的網(wǎng)站策劃、網(wǎng)站建設(shè)、網(wǎng)站制作、網(wǎng)站優(yōu)化、軟件開(kāi)發(fā)、網(wǎng)站改版等服務(wù),在成都10余年的網(wǎng)站建設(shè)設(shè)計(jì)經(jīng)驗(yàn),為成都上千中小型企業(yè)策劃設(shè)計(jì)了網(wǎng)站。

AOP解析

今天來(lái)介紹Spring的另一個(gè)核心技術(shù)點(diǎn)AOP,AOP的概念不好理解,希望大家仔細(xì)閱讀文章并按照文章中的代碼進(jìn)行練習(xí),屆時(shí)一定會(huì)有很大的收獲!

AOP (Aspect OrientProgramming),直譯過(guò)來(lái)就是 面向切面編程。AOP  是一種編程思想,是面向?qū)ο缶幊?OOP)的一種補(bǔ)充。面向?qū)ο缶幊虒⒊绦虺橄蟪筛鱾€(gè)層次的對(duì)象,而面向切面編程是將程序抽象成各個(gè)切面。從《Spring實(shí)戰(zhàn)(第4版)》圖書(shū)中扒了一張圖:

如何使用Spring AOP進(jìn)行測(cè)試

從該圖可以很形象地看出,所謂切面,相當(dāng)于應(yīng)用對(duì)象間的橫切點(diǎn),我們可以將其單獨(dú)抽象為單獨(dú)的模塊。

Spring提供了面向切面編程的豐富支持,是通過(guò)動(dòng)態(tài)代理實(shí)現(xiàn)的。允許通過(guò)分離應(yīng)用的業(yè)務(wù)邏輯與系統(tǒng)級(jí)服務(wù)(例如:審計(jì)(auditing)和事務(wù)(transaction)管理)進(jìn)行內(nèi)聚性的開(kāi)發(fā)。應(yīng)用對(duì)象只實(shí)現(xiàn)它們應(yīng)該做的——完成業(yè)務(wù)邏輯——僅此而已。它們并不負(fù)責(zé)(甚至是意識(shí)到)其它系統(tǒng)級(jí)別的關(guān)注點(diǎn),例如:日志或事務(wù)支持。

AOP 要達(dá)到的效果是,保證開(kāi)發(fā)者在不修改源代碼的前提下,去為系統(tǒng)中的業(yè)務(wù)組件添加某種通用功能。

AOP基本運(yùn)行流程如下圖所示:

如何使用Spring AOP進(jìn)行測(cè)試

AOP 領(lǐng)域中的特性術(shù)語(yǔ):

  • 橫切關(guān)注點(diǎn):跨越應(yīng)用程序多個(gè)模塊的方法或功能。即是與我們業(yè)務(wù)邏輯無(wú)關(guān)的,但是我們需要關(guān)注的部分,就是橫切關(guān)注點(diǎn)。如日志 , 安全 , 緩存 ,  事務(wù)等等....

  • 切面(ASPECT):橫切關(guān)注點(diǎn)被模塊化的特殊對(duì)象。即,它是一個(gè)類。

  • 通知(Advice):AOP 框架中的增強(qiáng)處理。通知描述了切面何時(shí)執(zhí)行以及如何執(zhí)行增強(qiáng)處理。它是類中的一個(gè)方法。

  • 目標(biāo)(Target):被通知對(duì)象。

  • 代理(Proxy):向目標(biāo)對(duì)象應(yīng)用通知之后創(chuàng)建的對(duì)象。

  • 連接點(diǎn)(JointPoint):表示應(yīng)用執(zhí)行過(guò)程中能夠插入切面的一個(gè)點(diǎn),這個(gè)點(diǎn)可以是方法的調(diào)用、異常的拋出。在 Spring AOP  中,連接點(diǎn)總是方法的調(diào)用。

  • 切入點(diǎn)(PointCut):可以插入增強(qiáng)處理的連接點(diǎn)。

  • 引入(Introduction):引入允許我們向現(xiàn)有的類添加新的方法或者屬性。

  • 織入(Weaving): 將增強(qiáng)處理添加到目標(biāo)對(duì)象中,并創(chuàng)建一個(gè)被增強(qiáng)的對(duì)象,這個(gè)過(guò)程就是織入。

Advice通知

通知(Advice)是切面的一種實(shí)現(xiàn),可以完成簡(jiǎn)單織入功能(織入功能就是在這里完成的)。Spring AOP 中有 5 中通知類型,分別如下:

如何使用Spring AOP進(jìn)行測(cè)試

各個(gè)通知的執(zhí)行順序如下圖所示:

如何使用Spring AOP進(jìn)行測(cè)試

實(shí)例編碼

需求:在類中添加日志功能,如下圖:

如何使用Spring AOP進(jìn)行測(cè)試

實(shí)現(xiàn)方法1:在各個(gè)類中添加方法logMsg()。如果類數(shù)量少,問(wèn)題不大,如果有幾百個(gè)類需要處理,那么工作量就很大了。

實(shí)現(xiàn)方法2:通過(guò)aop來(lái)實(shí)現(xiàn)

首先,mvn中添加配置


如何使用Spring AOP進(jìn)行測(cè)試

實(shí)例如下:

創(chuàng)建接口

public interface UserService {        public void add();        public void delete();        public void update();        public void search();     }

創(chuàng)建切入點(diǎn)類

public class UserServiceImpl implements UserService {       public void add() {           System.out.println("增加用戶");       }        public void delete() {           System.out.println("刪除用戶");       }        public void update() {           System.out.println("更新用戶");       }        public void search() {           System.out.println("查詢用戶");       }

創(chuàng)建類,實(shí)現(xiàn)@Before通知

import java.lang.reflect.Method; import org.springframework.aop.MethodBeforeAdvice; public class BeforeLog implements MethodBeforeAdvice {        //method : 要執(zhí)行的目標(biāo)對(duì)象的方法        //objects : 被調(diào)用的方法的參數(shù)        //Object : 目標(biāo)對(duì)象        public void before(Method method, Object[] objects, Object o) throws Throwable {           System.out.println( o.getClass().getName() + "的" + method.getName() + "方法被執(zhí)行了");       }     }

創(chuàng)建類,實(shí)現(xiàn)@After通知

import java.lang.reflect.Method; import org.springframework.aop.AfterReturningAdvice; public class AfterLog implements AfterReturningAdvice {        //returnValue 返回值        //method被調(diào)用的方法        //args被調(diào)用的方法的對(duì)象的參數(shù)        //target 被調(diào)用的目標(biāo)對(duì)象        public void afterReturning(Object returnValue,Method method, Object[] args, Object target) throws Throwable {           System.out.println("執(zhí)行了" + target.getClass().getName()           +"的"+method.getName()+"方法,"           +"返回值:"+returnValue);       }     }

編輯xml文件

<?xmlversion="1.0"encoding="UTF-8"?> <beansxmlns="http://www.springframework.org/schema/beans"     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"     xmlns:context="http://www.springframework.org/schema/context"     xmlns:aop="http://www.springframework.org/schema/aop"     xmlns:p="http://www.springframework.org/schema/p"     xmlns:c="http://www.springframework.org/schema/c"     xsi:schemaLocation="http://www.springframework.org/schema/beans        https://www.springframework.org/schema/beans/spring-beans.xsd        http://www.springframework.org/schema/context        https://www.springframework.org/schema/context/spring-context.xsd        http://www.springframework.org/schema/aop         http://www.springframework.org/schema/aop/spring-aop.xsd">     <context:annotation-config/>  <!--注冊(cè)bean-->    <beanid="userService"class="com.my.demo.aop.UserServiceImpl"/>    <beanid="beforelog"class="com.my.demo.aop.BeforeLog"/>    <beanid="afterLog"class="com.my.demo.aop.AfterLog"/>    <aop:config>        <!--切入點(diǎn) expression:表達(dá)式匹配要執(zhí)行的方法-->        <aop:pointcutid="pointcut"expression="execution(* com.my.demo.aop.UserServiceImpl.*(..))"/>        <!--執(zhí)行環(huán)繞; advice-ref執(zhí)行方法.pointcut-ref切入點(diǎn)-->        <aop:advisoradvice-ref="beforelog"pointcut-ref="pointcut"/>        <aop:advisoradvice-ref="afterLog"pointcut-ref="pointcut"/>    </aop:config> </beans>

測(cè)試類如下:

 public static void main(String[] args) {      ApplicationContextcontext = new ClassPathXmlApplicationContext("bean3.xml");       UserServiceuserService = (UserService) context.getBean("userService");       userService.search(); }

執(zhí)行測(cè)試代碼,結(jié)果如下

com.my.demo.aop.UserServiceImpl的search方法被執(zhí)行了 //before方法執(zhí)行

查詢用戶 //UserServiceImpl中的search方法

執(zhí)行執(zhí)行了

com.my.demo.aop.UserServiceImpl的search方法,返回值:null//after方法執(zhí)行

可以發(fā)現(xiàn)由于實(shí)現(xiàn)了@Before通知@After通知,我們?cè)谡{(diào)用方法前后,就分別自動(dòng)對(duì)before  和afterReturning完成了調(diào)用。

到此,相信大家對(duì)“如何使用Spring AOP進(jìn)行測(cè)試”有了更深的了解,不妨來(lái)實(shí)際操作一番吧!這里是創(chuàng)新互聯(lián)網(wǎng)站,更多相關(guān)內(nèi)容可以進(jìn)入相關(guān)頻道進(jìn)行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!

標(biāo)題名稱:如何使用SpringAOP進(jìn)行測(cè)試
文章鏈接:http://chinadenli.net/article24/joiije.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供微信公眾號(hào)ChatGPT、網(wǎng)站收錄企業(yè)網(wǎng)站制作、響應(yīng)式網(wǎng)站網(wǎng)站內(nèi)鏈

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

商城網(wǎng)站建設(shè)
欧美野外在线刺激在线观看| 中国美女草逼一级黄片视频| 九九久久精品久久久精品| 日本最新不卡免费一区二区| 亚洲黄香蕉视频免费看| 亚洲另类欧美综合日韩精品| 亚洲日本久久国产精品久久| 欧美一级不卡视频在线观看| 粉嫩国产美女国产av| 丰满人妻熟妇乱又乱精品古代| 中文字幕一区二区久久综合| 日本黄色高清视频久久| 人人妻人人澡人人夜夜| 人妻久久这里只有精品| 亚洲婷婷开心色四房播播| 久久经典一区二区三区| 中文字幕精品少妇人妻| 黄片免费观看一区二区| 真实偷拍一区二区免费视频| 亚洲欧美日韩在线看片| 黄色片一区二区三区高清| 亚洲精品欧美精品一区三区| 国产亚洲二区精品美女久久| 美日韩一区二区精品系列| 日韩精品视频高清在线观看| 欧美黄色成人真人视频| 免费啪视频免费欧美亚洲| 亚洲中文字幕视频一区二区| 欧美中文字幕一区在线| 亚洲国产香蕉视频在线观看| 亚洲精品日韩欧美精品| 欧美激情一区=区三区| 国产丝袜美女诱惑一区二区| 欧美大胆美女a级视频| 日本丰满大奶熟女一区二区| 亚洲一级二级三级精品| 国产午夜精品久久福利| 日本精品理论在线观看| 国产日韩久久精品一区| 好吊一区二区三区在线看| 亚洲一区二区精品国产av|