spring中的增强:注解和schema配置几种情况

更新时间:2023-07-14 07:22:21 阅读: 评论:0

spring中的增强:注解和schema配置⼏种情况
这⾥说⼀下spring的增强。先看schema的五种情况,如下代码:注意:
环绕增强的参数:ProceedingJoinPoint jp。ProceedingJoinPoint 是JoinPoint的⼦类。
public class MyAop {
public void before(JoinPoint jp){
System.out.println("before");
System.out.println("target:"+jp.getTarget());
System.out.println("args:"+Args()));
System.out.println("kind:"+jp.getKind());
}
public void after(JoinPoint jp){
System.out.println("after");
System.out.println("target:"+jp.getTarget());
System.out.println("args:"+Args()));
System.out.println("kind:"+jp.getKind());
}
public void afterRunning(JoinPoint jp,Object result){
System.out.println("afterRunning");
System.out.println("target:"+jp.getTarget());
System.out.println("args:"+Args()));
System.out.println("kind:"+jp.getKind());
System.out.println("result:"+result);
}
public void afterThrowing(JoinPoint jp,RuntimeException e){
System.out.println("afterThrowing");
System.out.println("target:"+jp.getTarget());
System.out.println("args:"+Args()));
System.out.println("kind:"+jp.getKind());
System.out.println("e:>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>");
e.printStackTrace();
}
public void AroundInfo(ProceedingJoinPoint jp){
System.out.println("AroundInfo");
什么调有序
System.out.println("target:"+jp.getTarget());
System.out.println("args:"+Args()));
System.out.println("kind:"+jp.getKind());
禁毒日是哪一天System.out.Signature());
}
再看看schema的配置。
<bean id="MyAop"class="aop.lf.aop.MyAop"></bean>
<aop:config>
<aop:aspect ref="MyAop" >
<aop:pointcut expression="execution(* aop.lf.biz.impl.*.add())"id="p1"/>
<aop:pointcut expression="execution(* aop.lf.biz.impl.*.sub(..))"id="p2"/>
<aop:before method="before" pointcut-ref="p1"/>
芝士蛋糕
<aop:after method="after" pointcut-ref="p2"/>
<aop:after-returning method="afterRunning" pointcut-ref="p1"returning="result"/>
<aop:after-throwing method="afterThrowing" pointcut-ref="p1" throwing="e"/>
<aop:around method="AroundInfo" pointcut-ref="p1" />
</aop:aspect>
</aop:config>
若⽅法换成实现接⼝写,如下。
public class MyAdvice implements MethodInterceptor {
//环绕增强
@Override
public Object invoke(MethodInvocation arg0) throws Throwable {
Object This();
Method Method();
Object [] Arguments();
System.out.println("环绕增强!");
System.out.println("调⽤"+target+"的"+Name()+"⽅法。⽅法⼊参:"+String(args));
try {
//前置通知
Object result = arg0.proceed();
System.out.println("调⽤" + target + "的" + Name() + "⽅法。⽅法返回值:" + result);
//返回通知,可以访问到⽅法的返回值
return result;
} catch (Throwable e) {
System.out.println("异常:" + e);
//访问⽅法的异常
throw e;
}
}
//  @Override AfterReturningAdvice
//  public void afterReturning(Object returnValue, Method method, Object[] args, Object target) throws Throwable { //      // TODO Auto-generated method stub
//
//  }
//MethodBeforeAdvice
//@Override
//  public void before(Method method, Object[] args, Object target) throws Throwable {
//      // TODO Auto-generated method stub
//
//  }
//ThrowsAdvice
//  public void afterThrowing(Method method, Object[] args, Object target, Exception ex){
//
//      System.out.Name());
//  }
}
澎湃汹涌这⾥说⼀下注解的写法。
@Order(2) //指定aop切⾯运⾏的优先级。
@Aspect
@Component
public class LoggerAspect {
/*
* 声明切⼊点表达式⽅法。
* 该⽅法⼀般不添加别的其他代码
*/
@Pointcut("execution(public int *.*(..))")
public void declareJointExpression(){
}
//会写execution(public int com.ArithmeticCalculator.*(..))
@Before("declareJointExpression()")
public void beforeMethod(JoinPoint jp){
String Signature().getName();
Object [] Args();
System.out.println("the method "+methodName+"args:"+String(args));
System.out.println("wwwwwwwww");
}
@After("execution(public int *.*(..))")
public void afterMethod(JoinPoint jp){
String Signature().getName();
Object [] Args();
System.out.println("the method "+methodName+"args:"+String(args));
System.out.println("after");
}
@AfterReturning(value="execution(public int *.*(..))",returning="result")好玩的手游排行
大学班干部public void afterReturning(JoinPoint jp,Object result){
String Signature().getName();
Object [] Args();
System.out.println("the method "+methodName+"args:"+String(args)+"result:"+result);        System.out.println("wwwwwwwww");
}
/*
* ⽅法出现异常时会执⾏的代码
*/
@AfterThrowing(value="execution(public int *.*(..))",throwing="e")
//这⾥Exception 可以换成其他异常进⾏捕捉
public void afterThrowing(JoinPoint jp,Exception e){
String Signature().getName();
Object [] Args();
System.out.println("the method "+methodName+"args:"+String(args)+"exception:"+e);        System.out.println("wwwwwwwww");
}
/*
* 类似于动态代理过程
* 参数:ProceedingJoinPoint
* 有返回值,返回值为⽬标⽅法的返回值
*/
@Around("execution(public int *.*(..))")
public Object  aroundMethod(ProceedingJoinPoint jp){
String Signature().getName();
Object [] Args();
System.out.println("wwwwwwwww");
Object result=null;
try {
//前置通知
System.out.println("the method "+methodName+"args:"+String(args));
result=jp.proceed();
//返回通知
System.out.println("the method ends with"+result);
} catch (Throwable e) {
//异常通知
System.out.println("the method "+methodName+"occurs exception:"+e);
e.printStackTrace();艺术留学研究生
校运会开幕式作文}
/
/后置
System.out.println("end with>>>>>>>>>>>>>>>>>>>>>>>>>>>>>");
return result;
}
}
增加⼀个关于优先级的验证。记得⽤@order
@Order(1)
@Aspect
@Component
public class ValidationAspect {
//不在同⼀个包下⾯记得写包名com.LoggerAspect.declareJointExpression()
@Before("LoggerAspect.declareJointExpression()")
public void validateArgs(JoinPoint jp){
System.out.println("validator:"+Arrays.Args()));
}
}
这样写了之后只需在xml中加⼊两⾏配置就好
<context:component-scan ba-package="com"></context:component-scan>
<aop:aspectj-autoproxy/>
还有spring4及以上使⽤注解时,记得导⼊jar包。

本文发布于:2023-07-14 07:22:21,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/fan/82/1095716.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:代码   配置   记得   通知
相关文章
留言与评论(共有 0 条评论)
   
验证码:
推荐文章
排行榜
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图