真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

springaop怎么用

這篇文章給大家分享的是有關(guān)spring aop怎么用的內(nèi)容。小編覺(jué)得挺實(shí)用的,因此分享給大家做個(gè)參考,一起跟隨小編過(guò)來(lái)看看吧。

創(chuàng)新互聯(lián)是一家專業(yè)提供迪慶州企業(yè)網(wǎng)站建設(shè),專注與成都做網(wǎng)站、網(wǎng)站制作、H5開(kāi)發(fā)、小程序制作等業(yè)務(wù)。10年已為迪慶州眾多企業(yè)、政府機(jī)構(gòu)等服務(wù)。創(chuàng)新互聯(lián)專業(yè)網(wǎng)站設(shè)計(jì)公司優(yōu)惠進(jìn)行中。

 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ù)邏輯類(MathCalculator);在業(yè)務(wù)邏輯運(yùn)行的時(shí)候?qū)⑷罩具M(jìn)行打?。ǚ椒ㄖ啊⒎椒ㄟ\(yùn)行結(jié)束、方法出現(xiàn)異常,xxx)

3、定義一個(gè)日志切面類(LogAspects):切面類里面的方法需要?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、給切面類的目標(biāo)方法標(biāo)注何時(shí)何地運(yùn)行(通知注解);

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

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

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

三步:

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

2)、在切面類上的每一個(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)前類是一個(gè)切面類
 * wmy 13:03 2019/9/5
 * @Param 
 * @return 
 **/
@Aspect
public class LogAspects {

  //抽取公共的切入點(diǎn)表達(dá)式
  //1、本類引用
  //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ù)邏輯類加入容器中
  @Bean("calculator")
  public MathCalculator calculator(){
    return new MathCalculator();
  }

  //切面類加入到容器中
  @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é)果:

spring aop怎么用

感謝各位的閱讀!關(guān)于“spring aop怎么用”這篇文章就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,讓大家可以學(xué)到更多知識(shí),如果覺(jué)得文章不錯(cuò),可以把它分享出去讓更多的人看到吧!


分享題目:springaop怎么用
瀏覽路徑:http://weahome.cn/article/ipijjd.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部