多多色-多人伦交性欧美在线观看-多人伦精品一区二区三区视频-多色视频-免费黄色视屏网站-免费黄色在线

國(guó)內(nèi)最全I(xiàn)T社區(qū)平臺(tái) 聯(lián)系我們 | 收藏本站
阿里云優(yōu)惠2
您當(dāng)前位置:首頁 > php框架 > 框架設(shè)計(jì) > Spring(十二)AspectJ框架開發(fā)AOP(基于注解)

Spring(十二)AspectJ框架開發(fā)AOP(基于注解)

來源:程序員人生   發(fā)布時(shí)間:2017-03-24 09:03:27 閱讀次數(shù):11604次

在上篇文章中( Spring(101)AspectJ框架開發(fā)AOP(基于xml))是使用xml對(duì)AspectJ的使用,@AspectJ 是AspectJ1.5新增功能,通過JDK5注解技術(shù),允許直接在Bean類中定義切面,所以可使用xml方式和注解方式來開發(fā)AOP 所以在這篇文章中我們使用注解來代替xml。
我們可使用注解1點(diǎn)1點(diǎn)替換xml的配置。
說明:

@Aspect 聲明切面,修飾切面類,從而取得 通知。
通知
@Before 前置
@AfterReturning 后置
@Around 環(huán)繞
@AfterThrowing 拋出異常
@After 終究
切入點(diǎn)
@PointCut ,修飾方法 private void xxx(){} 以后通過“方法名”取得切入點(diǎn)援用

替換bean

在xml中

<!-- 創(chuàng)建目標(biāo)類 -->
    <bean id="userServiceId" class="com.scx.xmlproxy.test.UserServiceImpl"></bean> 
    <!-- 創(chuàng)建切面類(通知) -->  
    <bean id="myAspectId" class="com.scx.xmlproxy.test.MyAspect"></bean>  

我們知道xml中的bean可使用注解@component來替換
在web開發(fā)中@component衍生了3個(gè)注解,我們也能夠?yàn)椴煌膶哟问褂貌煌淖⒔狻?/p>

web開發(fā),提供3個(gè)@Component注解衍生注解(功能1樣)
@Repository :dao層
@Service:service層
@Controller:web層
這3個(gè)注解和@Component1樣,在web開發(fā)中使用這3個(gè)注解使代碼更加清晰明了。
替換結(jié)果以下:
對(duì)目標(biāo)類,即service層
這里寫圖片描述
對(duì)切面類
這里寫圖片描述

替換AOP

<aop:aspect ref="myAspectId">

這里寫圖片描述

替換公共切入點(diǎn)

xml配置:

    <aop:pointcut expression="execution(*com.scx.xmlproxy.test.*.*(..))" id="myPointCut"/>

注解替換:
需要在1個(gè)私有的方法上面添加注解@Pointcut。援用時(shí)就使用方法名稱pointCut。
這里寫圖片描述

替換前置通知

xml配置:

<aop:before method="before" pointcut-ref="myPointCut"/>

注解替換:
在方法名上面添加@before注解

//前置通知
    @Before(value = "pointCut()")
    public void before(JoinPoint joinPoint){
        System.out.println("MyAspect-before");
    }

替換終究通知

xml代碼

<aop:after method="after" pointcut-ref="myPointCut"/>

注解替換

    //終究通知
    @After(value="pointCut()")
    public void after(JoinPoint joinPoint){
        System.out.println("MyAspect-after");
    }

替換后置通知

xml配置:

<aop:after-returning method="afterReturning" pointcut-ref="myPointCut" returning="ret" />

注解替換:

//后置通知
    @AfterReturning(value="pointCut()",returning="ret")
    public void afterReturning(JoinPoint joinPoint,Object ret){
        System.out.println("MyAspect-afterReturning  "+joinPoint.getSignature().getName()+"\t"+ret);
    }

替換環(huán)繞通知

xml配置:

 <aop:around method="around" pointcut-ref="myPointCut"/>    

注解替換:

//環(huán)繞通知
    @Around(value = "pointCut()")
    public Object around(ProceedingJoinPoint joinPoint) throws Throwable{
        System.out.println("MyAspect-around-前");
        Object obj=joinPoint.proceed();//履行目標(biāo)方法
        System.out.println("MyAspect-around-后");
        return obj;
    }

替換異常通知

xml配置:

<aop:after-throwing method="afterThrowing" pointcut-ref="myPointCut" throwing="e"/>

注解替換:

//異常通知
    @AfterThrowing(value="pointCut()")
    public void afterThrowing(JoinPoint joinPoint,Throwable e){
        System.out.println("MyAspect-afterThrowing "+e.getMessage());
    }

測(cè)試代碼和上篇1樣 運(yùn)行結(jié)果也是1樣。

生活不易,碼農(nóng)辛苦
如果您覺得本網(wǎng)站對(duì)您的學(xué)習(xí)有所幫助,可以手機(jī)掃描二維碼進(jìn)行捐贈(zèng)
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關(guān)閉
程序員人生
主站蜘蛛池模板: 黄色网址免费看 | 成人精品国产亚洲欧洲 | 日本a毛片| 天堂一码二码专区 | 欧美videos日本hd| 精品一区二区三区四区五区 | 国产精品99久久久 | 免费在线观看h | 日本人69式视频最长 | 婷婷久久综合 | 黄色毛片播放 | 亚洲免费网站在线观看 | jizz亚洲高清在线观看 | www日本免费视频 | 国产 日韩 一区 | 日韩欧美视频一区 | 久久精品国产精品亚洲人人 | 激情另类国内一区二区视频 | 亚洲精品一区二区三区在线观看 | 成人欧美一区二区三区在线 | 精品亚洲欧美高清不卡高清 | 国产精品成人一区二区三区 | videoa性欧美 | 欧美男同志高清videosbest | 欧美h视频在线观看 | 在线精品自拍 | 欧美午夜三级 | 国产精品三级在线观看 | www.91亚洲| 亚洲国产欧美在线 | 日韩高清一区二区三区五区七区 | 久久亚洲美女久久久久 | 久久精品一区二区三区不卡 | 亚洲国产日韩欧美在线vip1区 | 欧美国产亚洲精品a第一页 欧美国产亚洲精品高清不卡 | 老司机午夜在线 | 国产精品免费_区二区三区观看 | 日本一区二区三 | 最近免费中文字幕完整4 | 亚洲另类精品xxxx人妖 | 波多野结衣中文字幕在线视频 |