zoukankan      html  css  js  c++  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:描述注解是否被子类继承
  • 相关阅读:
    正则化--Lambda
    uwsgi配置cheaper模式进行自动弹性
    采集容器内存并写到excel
    通过进程id找到进程对应的容器并统计每个进程的内存占用写到excel里
    基于celery的任务管理
    基于Redis做内存管理
    uWSGI
    nginx
    服务发现
    绑核与巨页
  • 原文地址:https://www.cnblogs.com/Juaoie/p/13198236.html
Copyright © 2011-2022 走看看