java aop都有哪些组件_spring中的AOP详解

AOP:  面向切面编程

设置装备摆设文件的头信息

http://www.springframework.org/schema/beans/spring-beans.xsd

http://www.springframework.org/schema/context

http://www.springframework.org/schema/context/spring-context.xsd

http://www.springframework.org/schema/aop

http://www.springframework.org/schema/aop/spring-aop.xsd">

AOP的焦点组件:

切面(Aspect):切面是封装通用营业逻辑的组件,可以感化到其他组件上。

切入点(Pointcut): 用于指定哪些组件哪方式利用切面组件,Spring供应表达式来实现该制订。

通知(Advice):用于指定组件感化到目的组件的具体位置。

AOP前置通知:在目的组件的方式执行前执行的法式。

切入点法式:

packagemodel;public classChengxu {public voidtalk(String str){

System.out.println("str="+str);

}

}

切面法式:

packagemodel;importorg.aspectj.lang.JoinPoint;public classCharu {public voidlog(JoinPoint jp){

System.out.println("日记的方式");

System.out.println("获取目的函数参数体式格局:" +jp.getArgs()[0]);//获得切入点法式中方式的参数

System.out.println("获取目的对象:" +jp.getTarget().getClass().getName());//获得切入点程的 包名.类名System.out.println("获取目的函数的java反射对象:" +jp.getSignature());//获得切入点程的 返回类型 包名.类名.方式名()

System.out.println("执行前置通知");

}

}

Applicationcontext.xml省略文件头信息

AOP后置通知:在目的组件的方式正常执行并返回参数后执行的法式。

切入点法式:

packagemodel;public classChengxu {//此方式也可以没有返回值

publicString talk(String str){

System.out.println("str="+str);return "留存成功";

}

}

切面法式:

packagemodel;importorg.aspectj.lang.JoinPoint;public classCharu {public voidlog(JoinPoint jp,Object ret){//假如切入点方式没返回值,那么这个Object ret省略不写

System.out.println("后置");

System.out.println("obj为目的组件方式返回值:" +ret);

}

}

Applicationcontext.xml

异常通知:在目的组件的方式抛出异常信息后执行的法式。

注:当前置通知和后置通知发生异常时,这个异常通知是不执行的,只有当目的组件发生异常时才执行。

切面法式:

packagemodel;importorg.aspectj.lang.JoinPoint;public classCharu3 {public voidlog3(JoinPoint jp,Throwable t){

System.out.println("异常通知");

System.out.println("t为目的组件发生异常的信息:" +t);

}

}

切入点法式:

packagemodel;public classChengxu {//有返回值的方式

publicString talk(String str){

System.out.println("str="+str);

System.out.println(10/0);//发生异常的处所

return "留存成功";

}

}

Application.xml

最终通知:在目的组件的方式正常执行后执行,或在异常通知之前执行。

注:也就是当目的组件发生没发生异常,都邑被执行。

假如目的组件异常时,那后置通知不会执行,异常通知会执行。最终通知会在异常通知之前执行。

假如目的组件正常时,那最终通知会在后置通知之前执行。

Application.xml

环抱通知:  切面法式负责挪用目的组件的运行,与struts中的阻挡器功能雷同,可以完全庖代之前的几个通知。

切面法式:在类型为环抱通知的切面法式函数中,参数为org.aspectj.lang.ProceedingJoinPoint是JoinPoint的子类,扩展了JoinPoint类,供应了proceed()函数,该函数的感化是挪用目的组件,并返回目的组件返回的值。

Application.xml

切面法式:

public classCharu5 {public voidlog5(ProceedingJoinPoint pjp) {

System.out.println("前置通知");try{

Object ob= pjp.proceed();//挪用目的组件

System.out.println("目的函数的返回值:"+ob);

System.out.println("后置通知");

}catch(Throwable e) {

System.out.println("异常通知");

}

System.out.println("最终通知");

}

}

注释体式格局实现以上内容

XML中增添

@Aspect:代表切面法式

在切面类下添加下面代码实现各自的功能

前置通知:@Before(value="execution(* com.china.model.Chengxu.talk(*))")

后置通知:@AfterReturning(value="execution(*com.china.model.Chengxu.talk(*))",returning="ret")

异常通知:@AfterThrowing(value="execution(* com.china.model.Chengxu.talk(*))", throwing="e")

最终通知:@After(value="execution(* com.china.model.Chengxu.talk(*))")

环抱通知:@Around(value="execution(* com.china.model.Chengxu.talk(*))")

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值