最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

spring aop的簡(jiǎn)單使用方法詳解

 更新時(shí)間:2019年10月07日 10:28:29   作者:﹏岸與海的距離╮  
這篇文章主要介紹了spring aop的簡(jiǎn)單使用方法詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下

 AOP:【動(dòng)態(tài)代理】

指在程序運(yùn)行期間動(dòng)態(tài)的將某段代碼切入到指定方法指定位置進(jìn)行運(yùn)行的編程方式;

1、導(dǎo)入aop模塊;Spring AOP:(spring-aspects)

2、定義一個(gè)業(yè)務(wù)邏輯類(lèi)(MathCalculator);在業(yè)務(wù)邏輯運(yùn)行的時(shí)候?qū)⑷罩具M(jìn)行打?。ǚ椒ㄖ?、方法運(yùn)行結(jié)束、方法出現(xiàn)異常,xxx)

3、定義一個(gè)日志切面類(lèi)(LogAspects):切面類(lèi)里面的方法需要?jiǎng)討B(tài)感知MathCalculator.div運(yùn)行到哪里然后執(zhí)行;

通知方法:

  • 前置通知(@Before):logStart:在目標(biāo)方法(div)運(yùn)行之前運(yùn)行
  • 后置通知(@After):logEnd:在目標(biāo)方法(div)運(yùn)行結(jié)束之后運(yùn)行(無(wú)論方法正常結(jié)束還是異常結(jié)束)
  • 返回通知(@AfterReturning):logReturn:在目標(biāo)方法(div)正常返回之后運(yùn)行
  • 異常通知(@AfterThrowing):logException:在目標(biāo)方法(div)出現(xiàn)異常以后運(yùn)行
  • 環(huán)繞通知(@Around):動(dòng)態(tài)代理,手動(dòng)推進(jìn)目標(biāo)方法運(yùn)行(joinPoint.procced())

4、給切面類(lèi)的目標(biāo)方法標(biāo)注何時(shí)何地運(yùn)行(通知注解);

5、將切面類(lèi)和業(yè)務(wù)邏輯類(lèi)(目標(biāo)方法所在類(lèi))都加入到容器中;

6、必須告訴Spring哪個(gè)類(lèi)是切面類(lèi)(給切面類(lèi)上加一個(gè)注解:@Aspect)

[7]、給配置類(lèi)中加 @EnableAspectJAutoProxy 【開(kāi)啟基于注解的aop模式】
在Spring中很多的 @EnableXXX;

三步:

1)、將業(yè)務(wù)邏輯組件和切面類(lèi)都加入到容器中;告訴Spring哪個(gè)是切面類(lèi)(@Aspect)

2)、在切面類(lèi)上的每一個(gè)通知方法上標(biāo)注通知注解,告訴Spring何時(shí)何地運(yùn)行(切入點(diǎn)表達(dá)式)

3)、開(kāi)啟基于注解的aop模式;@EnableAspectJAutoProxy

package com.opk.bean;
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.*;

import java.util.Arrays;

/* 
 * @Aspect: 告訴Spring當(dāng)前類(lèi)是一個(gè)切面類(lèi)
 * wmy 13:03 2019/9/5
 * @Param 
 * @return 
 **/
@Aspect
public class LogAspects {

  //抽取公共的切入點(diǎn)表達(dá)式
  //1、本類(lèi)引用
  //2、其他的切面引用
  @Pointcut("execution(public * com.opk.bean.*.*(..))")
  public void pointCut(){};

  //@Before在目標(biāo)方法之前切入;切入點(diǎn)表達(dá)式(指定在哪個(gè)方法切入)
  @Before("pointCut()")
  public void logStart(JoinPoint joinPoint){
    Object[] args = joinPoint.getArgs();
    System.out.println(joinPoint.getSignature().getName()+":運(yùn)行。。。@Before,參數(shù)列表是:"+ Arrays.asList(args));
  }
  @After("com.opk.bean.LogAspects.pointCut()")
  public void logEnd(JoinPoint joinPoint){
    System.out.println(""+joinPoint.getSignature().getName()+"結(jié)束。。。@After");
  }

  //JoinPoint一定要出現(xiàn)在參數(shù)的第一位
  @AfterReturning(value ="pointCut()",returning = "result")
  public void logReturn(JoinPoint joinPoint,Object result){
    System.out.println(""+joinPoint.getSignature().getName()+"正常返回。。。@AfterReturning:運(yùn)行結(jié)果:{"+result+"}");
  }

  @AfterThrowing(value ="pointCut()",throwing = "ex")
  public void logException(JoinPoint joinPoint,Exception ex){
    System.out.println(""+joinPoint.getSignature().getName()+"異常。。。異常信息:{"+ex+"}");
  }
}
import org.springframework.stereotype.Component;

@Component
public class MathCalculator {
  public int dev(int i,int j)
  {
    System.out.println("MathCalculator......");
    return i/j;
  }
}
@EnableAspectJAutoProxy
@Configuration
public class AOPConfig {

  //業(yè)務(wù)邏輯類(lèi)加入容器中
  @Bean("calculator")
  public MathCalculator calculator(){
    return new MathCalculator();
  }

  //切面類(lèi)加入到容器中
  @Bean
  public LogAspects logAspects(){
    return new LogAspects();
  }
}
public static void main(String[] args) {
    AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext();
    ctx.register(AOPConfig.class);
    ctx.refresh();
    MathCalculator bean = (MathCalculator)ctx.getBean("calculator");
    bean.dev(10,3);

  }

運(yùn)行結(jié)果:

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • 一篇文章帶你了解Java 中序列化與反序列化

    一篇文章帶你了解Java 中序列化與反序列化

    這篇文章主要介紹了Java 序列化與反序列化(Serialization),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-07-07
  • java代理模式與動(dòng)態(tài)代理模式詳解

    java代理模式與動(dòng)態(tài)代理模式詳解

    代理就是一個(gè)人或者一個(gè)機(jī)構(gòu)代表另一個(gè)人或者另一個(gè)機(jī)構(gòu)采取行動(dòng)。在一些情況下,一個(gè)客戶(hù)不想或者不能夠直接引用一個(gè)對(duì)象,而代理對(duì)象可以在客戶(hù)端和目標(biāo)對(duì)象之前起到中介的作用
    2014-02-02
  • 初學(xué)者易上手的SSH-struts2 01環(huán)境搭建(圖文教程)

    初學(xué)者易上手的SSH-struts2 01環(huán)境搭建(圖文教程)

    下面小編就為大家?guī)?lái)一篇初學(xué)者易上手的SSH-struts2 01環(huán)境搭建(圖文教程)。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-10-10
  • Spring Boot項(xiàng)目利用Redis實(shí)現(xiàn)session管理實(shí)例

    Spring Boot項(xiàng)目利用Redis實(shí)現(xiàn)session管理實(shí)例

    本篇文章主要介紹了Spring Boot項(xiàng)目利用Redis實(shí)現(xiàn)session管理實(shí)例,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-06-06
  • 用Java程序判斷是否是閏年的簡(jiǎn)單實(shí)例

    用Java程序判斷是否是閏年的簡(jiǎn)單實(shí)例

    下面小編就為大家?guī)?lái)一篇用Java程序判斷是否是閏年的實(shí)現(xiàn)方法。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2016-06-06
  • Java實(shí)現(xiàn)經(jīng)典游戲超級(jí)瑪麗的示例代碼

    Java實(shí)現(xiàn)經(jīng)典游戲超級(jí)瑪麗的示例代碼

    在你的童年記憶里,是否有一個(gè)蹦跳、頂蘑菇的小人?本文將用java語(yǔ)言實(shí)現(xiàn)經(jīng)典游戲《超級(jí)瑪麗》,文中采用了swing技術(shù)進(jìn)行了界面化處理,需要的可以參考一下
    2022-02-02
  • String轉(zhuǎn)double失去精度問(wèn)題及解決

    String轉(zhuǎn)double失去精度問(wèn)題及解決

    這篇文章主要介紹了關(guān)于String轉(zhuǎn)double失去精度問(wèn)題及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-07-07
  • Java去掉小數(shù)點(diǎn)后面無(wú)效0的方案與建議

    Java去掉小數(shù)點(diǎn)后面無(wú)效0的方案與建議

    當(dāng)前小數(shù)點(diǎn)后面的位數(shù)過(guò)多的時(shí)候,多余的0沒(méi)有實(shí)際意義,下面這篇文章主要給大家介紹了關(guān)于Java去掉小數(shù)點(diǎn)后面無(wú)效0的方案與建議,文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-07-07
  • JAVA異常和自定義異常處理方式

    JAVA異常和自定義異常處理方式

    這篇文章主要介紹了JAVA異常和自定義異常處理方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-09-09
  • Java?并發(fā)編程之ForkJoin框架

    Java?并發(fā)編程之ForkJoin框架

    這篇文章主要為大家介紹了Java?ForkJoin框架,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來(lái)幫助,希望能夠給你帶來(lái)幫助
    2021-11-11

最新評(píng)論

江山市| 徐汇区| 攀枝花市| 黄龙县| 建始县| 泽普县| 建昌县| 道孚县| 加查县| 梁河县| 香河县| 丰顺县| 马龙县| 财经| 长宁区| 冀州市| 青神县| 清涧县| 云安县| 绵竹市| 昭平县| 汉川市| 津市市| 阆中市| 调兵山市| 新晃| 乐都县| 汶上县| 都昌县| 普兰县| 日喀则市| 龙江县| 稻城县| 朝阳区| 云林县| 厦门市| 普宁市| 武义县| 确山县| 寿宁县| 当阳市|