一、获取自定义注解的参数

1.1、创建带属性的自定义注解,用来注解切点(pointcut)

要获取自定义注解参数,就需要在自定义注解中增加几个属性,下面自定义的TimedTaskLog 中有两个属性:name和time。

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;@Target(ElementType.METHOD)   //定义注解的使用范围为方法
@Retention(RetentionPolicy.RUNTIME )
public @interface TimedTaskLog {String name() default "未添加...";String time() ;
}

1.2、在需要的方法上使用带属性的自定义注解

    @Scheduled(cron = "0 20 22 * * ?")@TimedTaskLog(name = "增值业务施工单表重新复制",time = " 22:20:00")//time有空格public void saveExtFreeWorkClone(){basicFreeWorkService.updateExtFreeWork();}

1.3、创建Aspect

import lombok.Setter;
import org.aspectj.lang.annotation.After;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.aspectj.lang.annotation.Pointcut;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import xhsoft.insurance.base.service.impl.SumUpKeepService;
import xhsoft.utils.XhTimer;
import xhsoft.utils.text.XhLogger;@Aspect//作用是把当前类标识为一个切面供容器读取
@Component//是一个通用的构造型注解,表明该类是一个 spring 组件
public class TaskRecord {// 先创建一个方法,方法名随意,但是需要制定@annotation为刚刚自定义的注解@Setter(onMethod_ = @Autowired)private transient SumUpKeepService sumUpKeepService;@Pointcut("@annotation(TimedTaskLog)")  //@annotation声明以注解的方式来定义切点public void taskRecord(){}// 使用@Before,需要先引入上面@Pointcut注解的方法名,在加上@annotation,// @annotation中的值,需要和action方法中的参数名称相同(必须相同,但是名称任意)@Before("taskRecord() && @annotation(timedTask)")//前置通知public void checkBefore(TimedTaskLog timedTask){XhLogger.info(timedTask.name());}@After("taskRecord() && @annotation(timedTask)") //后置通知public void checkAfter(TimedTaskLog timedTask){String time = XhTimer.date();String time1 = time+timedTask.time();//拼接执行时间String time2 = XhTimer.datetime();//定时任务执行完时间sumUpKeepService.saveTaskRecord(timedTask.name(),time1,time2);//执行记录保存入库XhLogger.info(timedTask.name()+"END");}
}

1.4、注解的理解与解释

Java注解是在JDK5时引入的新特性。@interface 可以声明一个你自定义的注解,对于@Target和@Retention是由Java提供的元注解,他们的作用是标记其他注解的注解。

@Target 用来约束注解可以应用的地方(如方法、类或字段),其中ElementType是枚举类型,其定义如下,也代表可能的取值范围。

public enum ElementType {/**标明该注解可以用于类、接口(包括注解类型)或enum声明*/TYPE,/** 标明该注解可以用于字段(域)声明,包括enum实例 */FIELD,/** 标明该注解可以用于方法声明 */METHOD,/** 标明该注解可以用于参数声明 */PARAMETER,/** 标明注解可以用于构造函数声明 */CONSTRUCTOR,/** 标明注解可以用于局部变量声明 */LOCAL_VARIABLE,/** 标明注解可以用于注解声明(应用于另一个注解上)*/ANNOTATION_TYPE,/** 标明注解可以用于包声明 */PACKAGE,/*** 标明注解可以用于类型参数声明(1.8新加入)* @since 1.8*/TYPE_PARAMETER,/*** 类型使用声明(1.8新加入)* @since 1.8*/TYPE_USE
}

@Retention用来约束注解的生命周期,分别有三个值,源码级别(source),类文件级别(class)或者运行时级别(runtime)

其他的元注解@Documented,作用是:使用 javadoc 工具为类生成帮助文档时是否要保留其注解信息。

@Inherited注解,作用是:使被它修饰的注解具有继承性(如果某个类使用了被@Inherited修饰的注解,则其子类将自动具有该注解)。

Java aop中参数传递相关推荐

  1. 【转载】Java语言中的参数传递

    在实际的开发过程中,方法调用是一种很常见的操作,在方法调用中,关于参数的处理可能很多进行实际开发的程序员都不一定理解的很清楚,下面系统的介绍一下Java语言中参数传递的规则,以及和参数传递相关的一些问 ...

  2. java args例子_Spring AOP中使用args表达式的方法示例

    本文实例讲述了Spring AOP中使用args表达式的方法.分享给大家供大家参考,具体如下: 一 配置 xmlns:xsi="http://www.w3.org/2001/XMLSchem ...

  3. 如何理解Java中参数传递只能传值?

    以前学习C#的时候,是完全在工作岗位上学习,一些底层较为深入的道理都不是很清楚.如今学习了Java,对于Java参数传递只能传值,不能传引用(指针)感到很困惑,在C#中不是常常说把某个引用传递到函数中 ...

  4. JAVA中参数传递问题的总结(按值传递和引用传递)

    关于JAVA中参数传递问题有两种,一种是按值传递(如果是基本类型),另一种是按引用传递(如果是對象). 首先以两个例子开始: 1) public class Test2 { public static ...

  5. java切点配置_Spring AOP中定义切点的实现方法示例

    本文实例讲述了Spring AOP中定义切点的实现方法.分享给大家供大家参考,具体如下: 一 配置 xmlns:xsi="http://www.w3.org/2001/XMLSchema-i ...

  6. java方法设置切点_java相关:Spring AOP中定义切点的实现方法示例

    java相关:Spring AOP中定义切点的实现方法示例 发布于 2020-6-6| 复制链接 摘记: 本文实例讲述了Spring AOP中定义切点的实现方法.分享给大家供大家参考,具体如下:一 配 ...

  7. 深入浅出Java中参数传递的原理

    文章目录 前言 基本类型传递 引用类型传递 总结 前言 今天,想和大家聊聊关于java中的参数传递的原理,参数的传递有两种,值传递和引用传递. 值传递:是指在调用函数时将实际参数复制一份传递到函数中, ...

  8. java @around_正确理解Spring AOP中的Around advice

    Spring AOP中,有Before advice和After advice,这两个advice从字面上就可以很容易理解,但是Around advice就有点麻烦了. 乍一看好像是Before ad ...

  9. Java开发中遇到具有挑战的事_170道Java工程师面试题,你敢挑战吗?

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 1.面向对象的特征有哪些方面? 2.访问修饰符public,private,protected,以及不写(默认)时的区别? 3.String 是最基本的数 ...

  10. Java虚拟机规范阅读(二)IEEE754简介以及Java虚拟机中的浮点算法

    什么是浮点数 在计算机系统的发展过程中,曾经提出过多种方法表达实数.典型的比如相对于浮点数的定点数(Fixed Point Number).在这种表达方式中,小数点固定的位于实数所有数字中间的某个位置 ...

最新文章

  1. 我和freelancer不得不说的故事5 --- 心理落差
  2. eBay的Turmeric和VJet的源程序移到了GitHub上
  3. 大话设计模式(四 业务的封装)
  4. 两者相差百分比怎么算_相差200元!小米11和iQOO 7谁更值得买?说说真实想法
  5. am335x uboot, kernel 编译
  6. 调用接口登录禅道_有java调用api登录并验证禅道的实例吗
  7. 论ORM之EFCore初篇(快速基于本地数据库实现数据操作)
  8. centos7 编译安装nginx 设置自启动服务 支持https
  9. 阿里云启动API创新大赛 设视频技术为场景赛题
  10. 啪的一下,马保国的流量被这帮人抢先变现了!
  11. python的lambda函数错误的是_Python 中的 AWS Lambda 函数错误 - AWS Lambda
  12. VRAR应该是工具,而不是“玩具”
  13. 求杨辉三角的前n行数据_两道简单的套公式算法题:杨辉三角
  14. Python基础函数学习笔记(三)
  15. kaldi GMM模型解码指令 gmm-latgen-faster详解
  16. DPDK QOS1 -- Linux HQOS的框架
  17. linkedin领英账号限制被封了怎么办?
  18. 数据库之战| 寻找你心中的数据库漫威英雄
  19. 使用css弹性布局,让页面footer底部固定
  20. 阿里巴巴数学竞赛详细解答(据说晋级的直接P8岗)

热门文章

  1. BZOJ1230 [Usaco2008 Nov]lites 开关灯
  2. POJ 2752 Seek the Name, Seek the Fame (KMP)
  3. § 1.3 简 单 的 Java程 序
  4. mxnet入门--第6篇
  5. OpenCvSharp4初识
  6. unity资源包package的导入导出
  7. 181026英语每日一句
  8. Photoshop 常用快捷键
  9. Atitit. 提升开发效率与质量DSL ( 3) ----实现DSL的方式总结
  10. paip.java OutOfMemoryError 解决方法o33