今日播报!自定义注解
【资料图】
注解(Annotation)也叫元数据,用于对代码进行说明,可以对包、类、接口、字段、方法参数、局部变量等进行注解。其实说白就是代码里的特殊标志,这些标志可以在编译,类加载,运行时被读取,并根据这些信息执行相应的处理,以便于其他工具补充信息或者进行部署。
元数据(Metadata),又称中介数据、中继数据,为描述数据的数据(data about data),主要是描述数据属性(property)的信息,用来支持如指示存储位置、历史数据、资源查找、文件记录等功能。
如果说注释是写给人看的,那么注解就是写给程序看的。它更像一个标签,贴在一个类、一个方法或者字段上。它的目的是为当前读取该注解的程序提供判断依据。比如程序只要读到加了@Test的方法,就知道该方法是待测试方法,又比如@Before注解,程序看到这个注解,就知道该方法要放在@Test方法之前执行。
注解类型@Target(标明注解使用的范围)“@Retention(标明注解被保留的阶段)@Target(ElementType.TYPE):作用接口、类、枚举、注解@Target(ElementType.FIELD) :作用属性字段、枚举的常量@Target(ElementType.METHOD):作用方法@Target(ElementType.PARAMETER):作用方法参数
”
“@Documented(标明是否生成javadoc文档)@Inherited(标明注解可继承)举个栗子创建注解@Retention(RetentionPolicy.SOURCE) 注解仅存在于源码中,在class字节码文件中不包含@Retention(RetentionPolicy.CLASS) 默认的策略,在class字节码文件中存在,但运行时无法获得@Retention(RetentionPolicy.RUNTIME) 在class字节码文件中存在,在运行时可以通过反射获取到
”
importjava.lang.annotation.*;@Documented@Retention(RetentionPolicy.RUNTIME)@Target(ElementType.METHOD)public@interfaceSysLog{//模块Stringmodel();//方法名称Stringname();//功能codeString[]code();}AOP处理注解
@Component@Aspect@Slf4jpublicclassSysLogAspect{@Pointcut("@annotation(com.example.demo.annotation.SysLog)")publicvoidlogPoint(){}@Around("logPoint()")publicObjectdoAround(ProceedingJoinPointjoinPoint)throwsThrowable{Objectresult=null;Signaturesignature=joinPoint.getSignature();MethodSignaturemethodSignature=(MethodSignature)signature;Methodmethod=methodSignature.getMethod();if(method!=null){SysLogsysLog=method.getAnnotation(SysLog.class);String[]code=sysLog.code();Stringname=sysLog.name();Stringmodel=sysLog.model();Objectproceed=joinPoint.proceed();log.info("code={},name={},model={},proceed={}",code,name,model,proceed);returnproceed;}returnresult;}}使用注解
@RestControllerpublicclassUserController{@SysLog(model="用户模块",name="getUserName",code={"c","r","u","d"})@GetMapping("/userName")publicvoidgetUserName(StringuserName){returnuserName;}}AOP中log日志打印结果
“code = [c, r, u, d],name=getUserName,model=用户模块,proceed=liugui
”
相关阅读
-
世界热推荐:今晚7:00直播丨下一个突破...
今晚19:00,Cocos视频号直播马上点击【预约】啦↓↓↓在运营了三年... -
NFT周刊|Magic Eden宣布支持Polygon网...
Block-986在NFT这样的市场,每周都会有相当多项目起起伏伏。在过去... -
环球今亮点!头条观察 | DeFi的兴衰与...
在比特币得到机构关注之后,许多财务专家预测世界将因为加密货币的... -
重新审视合作,体育Crypto的可靠关系才能双赢
Block-987即使在体育Crypto领域,人们的目光仍然集中在FTX上。随着... -
简讯:前端单元测试,更进一步
前端测试@2022如果从2014年Jest的第一个版本发布开始计算,前端开发... -
焦点热讯:刘强东这波操作秀
近日,刘强东发布京东全员信,信中提到:自2023年1月1日起,逐步为...