定时任务、反射、注解

栏目: IT技术 · 发布时间: 3年前

内容简介:java文件在计算机中的三个阶段

定时任务

开启定时任务

@EnableScheduling 在spring boot启动类加上,表示开启定时任务

设置定时任务

@Scheduled 设置需要定时执行的方法

参数cron

字段 允许值 允许的特殊字符
second 0-59 ,-*/
minute 0-59 ,-*/
hour 0-23 ,-*/
day of month 1-31 ,-*/?LWC
month 1-12 ,-*/
day of week 0-7(0和7都是星期天) ,-*/?LW#
特殊字符 表示含义
, 枚举
- 区间
* 任意
/ 步长
日/星期冲突匹配
L 最后
W 工作日
C 和calendar联系后计算的值
# 星期,4#2表示的是第二个星期四

例子1

//周五的每分钟第0,第1,第2,第3秒都运行一次
    @Scheduled(cron = "0,1,2,3 * * * * 5")
    public void aa() {...}

例子2

//周五的每分钟,从零秒启动,每四秒都运行一次
    @Scheduled(cron = "0/4 * * * * 5")
    public void aa() {...}

反射

反射机制:将类的各个组成部分封装成对象

java文件在计算机中的三个阶段

Source 源代码阶段 Class 类对象阶段 Runtime 运行阶段
java 文件通过javac编译成class文件,通过ClassLoader(类加载器)将class字节码文件加载进内存, 通过Class类对象对该类的成员变量、构造方法、成员方法进行分类,分别加载进fields、constructors、methods进行分类 创建对象
  1. 获取成员变量
    1. Field[] getFields() 获取public修饰的成员变量
    2. Field getField(String name) 获取指定名称的public修饰的成员变量
    3. Field[] getDeclaredFields() 获取所有的成员变量
    4. Field[] getDeclaredField(String name) 获取指定名称的成员变量
  2. 获取成员方法
    1. Constructor<?>[] getConstructors()
    2. Constructor getConstructor(类<?>... parameterTypes)
    3. Constructor getDeclaredConstructor(类<?>... parameterTypes)
    4. Constructor<?>[] getDeclaredConstructors()
  3. 获取成员方法
    1. Method[] getMethods()
    2. Method getMethod(String name,类<?>... parameterTypes)
    3. Method[] getDeclaredMethods()
    4. Method getDeclaredMethod(String name,类<?>... parameterTypes)
  4. 获取类名
    1. String getName()

例子1

//获取字节码文件的class类对象
    Class<Person> personClass = Person.class;
    //获取public修饰的成员变量
    Field field = personClass.getField("a");
    Person person = new Person();
    Object o = field.get(person);
    System.out.println(o);

例子2

//获取字节码文件的class类对象
    Class<Person> personClass = Person.class;
    //获取protected的成员变量
    Field d = personClass.getDeclaredField("d");
    Person person = new Person();
    //忽略访问权限修饰符安全检查,
    d.setAccessible(true);//暴力反射
    Object o = d.get(person);
    System.out.println(o);

获取Class对象的方式

  1. Class.forName("全类名");将字节码文件加载进内存,返回Class对象

  2. 类名.class;通过类名的属性class获取

  3. 对象.getClass();getClass()方式在Object类中定义着。

    同一个字节码文件(*.class)在一次程序运行过程中,只会被加载一次,不论通过哪一种方式获取class对象都是同一个。

注解

注解的分类:

  1. 编写文档:通过代码里标识的元数据生成文档
  2. 代码分析:通过代码里标识的元数据对代码进行分析
  3. 编译检查:通过代码里标识的元数据让编译器能够实现基本的编译检查

jdk内置注解:

  1. @Override:检查该数据标识的方法是否是继承自父类(接口)
  2. @Deprecated:将该注解标注的内容,已过时
  3. @SuppressWarnings:压制警告

自定义注解:

  • 格式:

    元注解

    public @interface 注解名称{}

  • 本质:注解本质就是一个接口,该接口默认继承Annotation接口

  • 属性: 接口中可以定义的成员方法

    • 要求:
      • 数据返回值类型
        • 基本数据类型
        • String
        • 枚举
        • 注解
        • 以上类型的数组
  • 元注解:用于描述注解的注解

    • @Target: 描述注解能够作用的位置
    • @Retention: 描述注解能保留的阶段
    • @Documented: 描述注解是否被抽取到api文档中
    • @Inherited:描述注解是否被子类继承

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Node.js:来一打 C++ 扩展

Node.js:来一打 C++ 扩展

死月 / 电子工业出版社 / 2018-6-1 / 109

Node.js 作为近几年新兴的一种编程运行时,托 V8 引擎的福,在作为后端服务时有比较高的运行效率,在很多场景下对于我们的日常开发足够用了。不过,它还为开发者开了一个使用C++ 开发 Node.js 原生扩展的口子,让开发者进行项目开发时有了更多的选择。 《Node.js:来一打 C++ 扩展》以 Chrome V8 的知识作为基础,配合 GYP 的一些内容,将教会大家如何使用 Node......一起来看看 《Node.js:来一打 C++ 扩展》 这本书的介绍吧!

在线进制转换器
在线进制转换器

各进制数互转换器

RGB HSV 转换
RGB HSV 转换

RGB HSV 互转工具