package com.vx.servicehi.annotation;

import java.lang.annotation.Annotation;

import java.lang.reflect.Method;

/**

* 解析注解

* 通过反射获取类,函数或成员上的运行时注解信息,从而实现动态控制程序运行的逻辑

*

* 对于一个类或者接口来说,Class 类中提供了以下一些方法用于反射注解。

getAnnotation:返回指定的注解

isAnnotationPresent:判定当前元素是否被指定注解修饰

getAnnotations:返回所有的注解

getDeclaredAnnotation:返回本元素的指定注解

getDeclaredAnnotations:返回本元素的所有注解,不包含父类继承而来的

*

* @author wangbs

* @date 2019-12-21 22:52:42

*

*/

public class ParseDecription {

public static void main(String[] args) {

// TODO Auto-generated method stub

// 1、使用类加载器加载类

try {

Class c = Class.forName("com.hd.TestRateLimiter");

System.out.println(c);

// 2、找到类上面的注解

boolean isExist = c.isAnnotationPresent(RateLimiter.class);

if(isExist) {

// 3、拿到注解实例

RateLimiter d = (RateLimiter) c.getAnnotation(RateLimiter.class);

System.out.println("========parse class annotation=========");

System.out.println("desc = " + d.key());

System.out.println("author = " + d.message());

System.out.println("age = " + d.limit());

}

// 4、找到方法上的注解

Method[] ms = c.getMethods();

for (Method m : ms) {

boolean isMExist = m.isAnnotationPresent(RateLimiter.class);

if(isMExist) {

RateLimiter d = m.getAnnotation(RateLimiter.class);

System.out.println("========parse method annotation=========");

System.out.println("desc = " + d.key());

System.out.println("author = " + d.message());

System.out.println("age = " + d.limit());

}

}

// 另外一种解析方法

for (Method m : ms) {

Annotation[] annotations = m.getAnnotations();

for (Annotation annotation : annotations) {

if(annotation instanceof RateLimiter) {

System.out.println("========parse method annotation other way=========");

RateLimiter d = (RateLimiter) annotation;

System.out.println("desc = " + d.key());

System.out.println("author = " + d.message());

System.out.println("age = " + d.limit());

}

}

}

} catch (ClassNotFoundException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

}

Java切面理解_Spring AOP面向切面编程:理解篇相关推荐

  1. Java绝地求生—Spring AOP面向切面编程

    Java绝地求生-Spring AOP面向切面编程 背景 动态代理 构建被代理对象 自动生成代理 调用动态代理 Spring方法 方式一:使用Spring的API接口 方式二:使用自定义类 方式三:使 ...

  2. java框架013——Spring AOP面向切面编程

    一.Spring AOP简介 AOP的全称是Aspect-Oriented Programming,即面向切面编程(也称面向方面编程).它是面向对象编程(OOP)的一种补充,目前已成为一种比较成熟的编 ...

  3. java aop面向切面编程

    最近一直在学java的spring boot,一直没有弄明白aop面向切面编程是什么意思.看到一篇文章写得很清楚,终于弄明白了,原来跟python的装饰器一样的效果.http://www.cnblog ...

  4. python aop编程_学习笔记: AOP面向切面编程和C#多种实现

    AOP:面向切面编程   编程思想 OOP:一切皆对象,对象交互组成功能,功能叠加组成模块,模块叠加组成系统 类--砖头     系统--房子 类--细胞     系统--人 面向对象是非常适合做大型 ...

  5. 【SSM】Spring系列——AOP面向切面编程

    文章目录 03 AOP面向切面编程 3.1 AOP概述 3.2 面向切面编程对有什么好处 3.3 模拟AOP框架实现 3.3.1 代码实现版本一 3.3.2 代码实现版本二 3.3.3 代码实现版本三 ...

  6. AOP面向切面编程之全局日志打印/统计接口耗时

    目录 一.什么是AOP 二.AOP使用场景 三.使用AOP的好处 四.先举个例子理解AOP面向切面编程 五.Spring5.X的AOP切入点表达式有这些种写法 六.实战基于Spring的AOP快速实现 ...

  7. 【AOP 面向切面编程】Android Studio 使用 AspectJ 监控方法运行原理分析

    文章目录 一.查看使用 AspectJ 后生成的 Class 字节码类 二.AspectJ 的本质 一.查看使用 AspectJ 后生成的 Class 字节码类 在 Android Studio 中查 ...

  8. 【AOP 面向切面编程】AOP 简介 ( AspectJ 简介 | AspectJ 下载 )

    文章目录 一.AOP 简介 二.AspectJ 简介 三.AspectJ 下载 一.AOP 简介 AOP 是 Aspect Oriented Programming 的缩写 , 面向切面编程 ; 利用 ...

  9. 切面是异步还是同步操作‘_Autofac的AOP面向切面编程研究

    什么是AOP: 我的理解是 把系统性的编程工作封装起来 =>我给这个取个名字叫 "Aspect",然后通过AOP技术把它切进我们的业务逻辑代码 => "业务& ...

最新文章

  1. 如何判断你的数据集是否适合使用深度学习模型?如果数据量太小有什么解决办法?
  2. 如何将命令行参数传递给Node.js程序?
  3. Linux基础常用运维操作
  4. Taro+react开发(70):flex布局
  5. 移动硬盘提示无法访问设备硬件出现致命错误,导致请求失败的资料寻回方案
  6. 深度学习在搜索业务中的探索与实践 1
  7. SpringBoot使用@ServerEndpoint无法依赖注入问题解决 SpringBoot webSocket配置
  8. 泛微OA前端代码开发方式
  9. 德语翻译器在线翻译中文-德语翻译器支持各大语言翻译
  10. 浏览器flash/html5视频播放如何倍速(Enounce MySpeed)
  11. javascript 按下回车键触发input表单的切换(enter键代替tab键功能)
  12. 分门别类刷leetcode——链表(C++实现)
  13. 阿里云安全防护是如何做到的?有怎样的安全生态圈
  14. fme使用workspacerunner批量处理数据
  15. 成都拓嘉启远:拼多多上产品清单的条件
  16. 一个多线程Ping 类
  17. java jsf_eclipse搭建JSF简单示例的教程(亲测)
  18. Python到底是干啥的?
  19. 3.操作系统——CPU的实模式、保护模式和长模式
  20. CSS+html:天涯网页仿照制作

热门文章

  1. 教程 | Caffe在Windows10系统上安装与配置
  2. 图像降维之MDS特征抽取方法
  3. 深入 Python 解释器源码,我终于搞明白了字符串驻留的原理!
  4. WCF Security基本概念(转载)
  5. 书值 | 第 2 期:成为技术管理者,思维上应该如何转变?
  6. HttpRequest接口测试
  7. angular-创建自定义的指令
  8. 烂泥:php5.6源码安装及php-fpm配置与nginx集成
  9. nacos 配置动态刷新_nacos配置中心修改后刷新
  10. python代码转换为pytorch_Pytorch中Tensor与各种图像格式的相互转化详解