Advice

针对切面上的bean的集合,要进行统一的处理。
实际上呢是给这些bean增加行为
advice的定义同样是一个bean

使用<tx:advice>定义advice

采用<tx:advice>标签进行定义,可以看到这种方式将这对特定的method进行特定的动作
<!-- 事务控制 --><tx:advice id="txAdvice" transaction-manager="transactionManager"><tx:attributes><tx:method name="save*" propagation="REQUIRED"rollback-for="Exception" /><tx:method name="insert*" propagation="REQUIRED"rollback-for="Exception" /><tx:method name="update*" propagation="REQUIRED"rollback-for="Exception" /><tx:method name="remove*" propagation="REQUIRED"rollback-for="Exception" /><tx:method name="delete*" propagation="REQUIRED"rollback-for="Exception" /><tx:method name="get*" read-only="true" /><tx:method name="select*" read-only="true" /><tx:method name="find*" read-only="true" /><tx:method name="*" propagation="REQUIRED" rollback-for="Exception,RemoteException" /></tx:attributes></tx:advice>
可以定义多个advice
    <tx:advice id="txAdviceDao" transaction-manager="transactionManager"><tx:attributes><tx:method name="updateNode" propagation="NOT_SUPPORTED" rollback-for="Exception"/></tx:attributes></tx:advice> 

使用bean定义来定义advice然后再被引用

<bean id="annotationAdivce" class="com.lambdafk.inr.common.spring.AnnotationAdvice"/>
使用这种bean定义的方式定义这个advice时候,我们需要像上面的<tx:advice> 一样  来指定特定的方法
因此这个bean需要实现  MethodInterceptor 这个接口,这个接口是一个方法拦截器,可以像代理模式一样呢给 拦截的方法 (target)增加新的行为
public class AnnotationAdvice implements MethodInterceptor {@Overridepublic Object invoke(MethodInvocation invocation) throws Throwable {Log logger = LogFactory.getLog(invocation.getClass());RunTimeAnno runTimeAnno = invocation.getMethod().getAnnotation(RunTimeAnno.class);String value = runTimeAnno.value();logger.info("【"+value+"开始】");long  t1 = System.currentTimeMillis();Object object = invocation.proceed();long t2 = System.currentTimeMillis();logger.info("【"+value+"结束,耗时"+(t2-t1)+"ms】");return object;}
}

将advice和pointcut组装成advisor

Advisor是Pointcut和Advice的配置器,它包括Pointcut和Advice,是将Advice注入程序中Pointcut位置的代码
advice-ref  和 pointcut 以及  pointcut-ref
先定义切点和advice然后进行advisor的组装
   <aop:config ><aop:advisor  advice-ref="annotationAdivce" pointcut-ref="annotationPointcut"/></aop:config>
定义aop的时候直接定义切点
   <aop:config><aop:pointcut id="txPointcutDao" expression="execution(* cn.lambdafk.bpm.dao.*Dao.*(..))" /><aop:advisor advice-ref="txAdviceDao" pointcut-ref="txPointcutDao" /></aop:config>  
   <aop:config>  <aop:advisor pointcut="execution(* *com.lambdafk.inr.quartz.HandlerNet*.*(..))" advice-ref="handlerAdvice" />  <aop:advisor pointcut="execution(* *com.lambdafk.inr.quartz.HandlerPay*.*(..))" advice-ref="handlerAdvice" />  </aop:config

AOP-自定义advice相关推荐

  1. JPOM - AOP+自定义注解实现操作日志记录

    文章目录 地址 版本 源码解析-AOP+自定义注解实现操作日志记录 地址 Gitee: https://gitee.com/dromara/Jpom 官网: https://jpom.io/ 一款简而 ...

  2. spring AOP自定义注解方式实现日志管理

    转:spring AOP自定义注解方式实现日志管理 今天继续实现AOP,到这里我个人认为是最灵活,可扩展的方式了,就拿日志管理来说,用Spring AOP 自定义注解形式实现日志管理.废话不多说,直接 ...

  3. springboot+aop+自定义注解,打造通用的全局异常处理和参数校验切面(通用版)

    springboot+aop+自定义注解,打造通用的全局异常处理和参数校验切面(通用版) 参考文章: (1)springboot+aop+自定义注解,打造通用的全局异常处理和参数校验切面(通用版) ( ...

  4. Java AOP自定义注解

    一.背景 在之前文章:Java注解详解中,主要介绍了注解的含义.作用.以及常用的各类注解.今天主要介绍在Springboot中如何实现一个自定义注解,通过自定义注解去实现一些定制化的需求. 二.了解元 ...

  5. 实习笔记—— AOP开发II(AOP中Advice的类型)

    系列文章目录 实习笔记 -- Spring基础 实习笔记 -- IOC反转控制(xml配置文件 + 注解) 实习笔记 -- AOP开发I 文章目录 系列文章目录 一.AOP中Advice的类型的XML ...

  6. spring aop 自定义注解配合swagger注解保存操作日志到mysql数据库含(源码)

    spring aop 自定义注解保存操作日志到mysql数据库 一.思路 二.自定义注解 三.编写操作日志 四.编写操作日志切面\增强 五.使用 六.`注意` 一.思路 利用spring aop 对方 ...

  7. Spring AOP自定义注解并获取注解的参数

    环境 springboot:1.5 Intellij IDEA:2021.1 序言 最近有个需求,要做方法层面的权限控制.以前在公司使用的是spring security,然后使用注解 如下: @Pr ...

  8. AOP+自定义注解实现字典翻译

    目录 需求: 结果展示 : 代码实现 : 需求: 一般情况下数据库表中字段对应的是字典值,但在查询或导出时需要展示字典名,若每次字典转换时都需要关联字典表查询,而且导出时还需要在做一次数据转换,这样处 ...

  9. Spring AOP 自定义注解记录操作日志

    1.自定义注释 @Target(ElementType.METHOD) @Retention(RetentionPolicy.RUNTIME) @Inherited public @interface ...

  10. Spring AOP增强(Advice)

    Sring AOP通过PointCut来指定在那些类的那些方法上织入横切逻辑,通过Advice来指定在切点上具体做什么事情.如方法前做什么,方法后做什么,抛出异常做什么. 再来看一下图 定义Point ...

最新文章

  1. 人工不智能,AI产品经理要帮助用户认清这一现实
  2. 关闭socket以及Socket选项
  3. android view getx 0,Android动画:解决通过View.getY()获取初始位置为0的问题
  4. 幼小衔接语言教案上c册_关于幼小衔接,这里有你最想要的解答
  5. DIY自己的GNU交叉工具链(i386-arm) 【ZT】
  6. 李迟2021年11月知识总结
  7. python 去除水印_基于python的图片修复程序(实现水印去除)
  8. [WC2018]即时战略——动态点分治(替罪羊式点分树)
  9. FM1208CPU卡读写函数说明
  10. java炒股软件_股票软件java,中国软件股票怎么样
  11. 深度学习-对抗神经网络简介
  12. eclipse 背景绿豆沙颜色
  13. VBA中调用Excel函数
  14. Spring错误——Spring 注解——factory-bean reference points back to the same bean definition
  15. 解除封闭、寒假延长!多校发通知!
  16. 【转】Ceph对象存储(rgw)的IPv6环境配置
  17. 智能电动车骑行头盔安全帽方案/APP/PCBA/小程序/开发
  18. java毕业设计软件S2SH人力资源管理系统|人事薪资招聘oa人力请假考勤工资[包运行成功]
  19. 操作系统实验| Linux系统调用的实现
  20. 安装黑群晖找不到局域网电脑_简单几招,教你如何隐藏电脑上的文件,保证让其他人找不到!...

热门文章

  1. 百度地图离线API2.0(含示例,可完全断网访问)
  2. c 语言中虚方法有什么作用是什么,虚函数的作用?
  3. Linux报错:-bash: 路径xx: No such file or directory解决方法
  4. 随机变量的期望和方差
  5. undefsafe原型链[网鼎杯 2020 青龙组]notes
  6. Unity射线与UI碰撞检测
  7. 在Leaflet中自定义4490坐标系
  8. 面经分享|中科院老哥的算法开发岗面经总结
  9. OCT-模拟集成电路设计的九个境界
  10. 高效理解pytorch的backward需要scalar outputs