采网站建设南京发布最新通报
news/
2025/9/22 17:58:23/
文章来源:
采网站建设,南京发布最新通报,怎么样推广网站,天津工程信息网AOP简介
AOP(Aspect oriented Programming)面向切面编程#xff0c;就是面向特定的方法编程#xff0c;将方法比作一个一个的切面#xff0c;可以向指定的方法执行前/后执行自己的逻辑。如统一获取方法的时间。
应用场景#xff1a; 记录操作日志、权限控制、事务管理
优…AOP简介
AOP(Aspect oriented Programming)面向切面编程就是面向特定的方法编程将方法比作一个一个的切面可以向指定的方法执行前/后执行自己的逻辑。如统一获取方法的时间。
应用场景 记录操作日志、权限控制、事务管理
优势 代码无侵入无需在原先的代码上修改、减少重复代码、提高开发效率、维护方便
原理
动态代理运行时会注入一个动态代理对象实现了注入的接口动态代理对象会先后执行切片前的方法、调用方法、切片后的方法。 在动态代理时的userMapper
核心概念
JoinPoint连接点能够被控制的方法在spring中指方法的运行含有方法执行时的相关信息。 Advice通知指重复、相同的功能即共性功能。 PointCut切入点匹配连接的条件实际被AOP控制的方法通知只有在切入点方法执行时被应用。 Aspect切面描述通知和切入点的对应关系 target目标对象通知所应用的对象。
使用方式 1.创建切面类 标记注解Aspect Component 2.创建切面方法参数为ProceedingJoinPoint连接点在方法上加入Around注解表明该切面在哪个方法调用时执行。
切入点表达式Around(execution(* com.yi.springbootwebquickstart.controller.*.*(..))) 第一个*表示任意返回值第二个*表示controller包下的任意类第三个*表示类中的任意方法 根据自定义注解匹配Around(annotation(com.yi.springbootwebquickstart.aop.mylog))Component
Aspect
Slf4j
public class TimeAspect {Around(execution(* com.yi.springbootwebquickstart.controller.*.*(..)))public void recordTime(ProceedingJoinPoint joinPoint) throws Throwable {long begin System.currentTimeMillis();Object result joinPoint.proceed();long end System.currentTimeMillis();log.info({} cost time:(end-begin),joinPoint.getSignature());}
}
通知
1.通知类型
Around 环绕通知在目标方法执行前后执行 Before 前置通知在目标方法执行前执行 After 后置通知在目标方法执行后执行有异常也会执行 AfterReturning 返回后通知在目标方法返回后执行有异常不会执行 AfterThrowing 异常后通知在目标方法发生异常后执行 Component
Aspect
Slf4j
public class TimeAspect {//定义一个方法将相同的切入点表达式抽出出来Pointcut(execution(* com.yi.springbootwebquickstart.controller.*.*(..))) public void pt(){}Around(pt())public Object recordTime(ProceedingJoinPoint joinPoint) throws Throwable {long begin System.currentTimeMillis();Object result joinPoint.proceed();long end System.currentTimeMillis();log.info({} cost time:(end-begin),joinPoint.getSignature());return result;}Before(pt())public void before(){System.out.println(before);}After(pt())public void after(){System.out.println(after);}AfterReturning(pt())public void afterReturning(){System.out.println(afterReturning);}AfterThrowing(pt())public void afterThrowing(){System.out.println(afterThrowing);}
}
2.通知顺序
默认是按照类名以环绕顺序来执行字母越靠前通知前方法越先执行通知后方法越后执行。 可以加入在类名上加入Order(int) 来控制执行顺序数字越小通知前方法越先执行通知后方法越后执行。
连接点可以被AOP控制的方法
在Spring中特指方法的运行可以通过连接点获取方法执行时的相关信息如类名、方法名、方法参数等。 Around通知只能用ProceedingJoinPoint其他通知只能用JointPoint
log.info(目标方法的类名:{},joinPoint.getTarget().getClass().getName());
log.info(目标方法签名:{},joinPoint.getSignature());
log.info(目标方法方法名{},joinPoint.getSignature().getName());
log.info(运行参数:{},joinPoint.getArgs());
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/909896.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!