• Java 注解入门


    1.什么是注解

    1. 注解的语法: @注解名称;
    2. 注解的作用: 用来替代 xml 配置文件; 在 Servlet 3.0 中就可以使用注解来代替配置文件;
    3. 注解是由框架来读取使用的;
    4. 所有的注解都是 Annotation 的子类;
    5. 简单说, 注解是给程序(框架)看到, 而注释是给人看的.

    2. 注解的使用

    • 定义注解类: 框架的工作; 语法: public @interface MyAnnotation{....}.
    • 使用注解: 程序员的工作;
    • 读取注解(反射): 框架的工作;

    3. 注解的属性

    3.1 定义属性
    • 格式: 类型 属性名();
    // 定义属性
        @interface MyAnno2 {
            int age();  // 定义属性 age
            String name(); // 定义属性 name
            String value() default "hello world!";  // value 是带有默认值的属性
        }
    
    3.2 使用注解时,给属性赋值
        @MyAnno2(age=100, name="zhangsan")
        public class Demo{
            ......
        }
    
    3.3 属性名为 value 的特权
    • 当使用注解时, 如果只给名为 value 的属性赋值时,可以省略 "value="
      例如: @MyAnno(value="hello") 可以书写成 @MyAnno("hello")
    3.4 注解属性的类型
    • 八种基本数据类型
    • String 类型
    • Enum 类型
    • Class 类型
    • 注解类型
    • 以上类型的一维数组类型
    • Integer 类型不可以
        @MyAnno2(
            // 为注解属性赋值
            a=100,
            b="hello",
            c=MyEnum1.A,
            d=String.class,
            e=@MyAnno3(aa=200,bb="world"),
            f={"",""}  // 如果数组中的元素个数为1时, 可以省略大括号
        )
        public class Demo{
    
        }
    
        // 定义注解
        @interface MyAnno2 {
            int a();
            String b();
            MyEnum1 c(); // Enum 类型
            Class d();
            MyAnno3 e();
            String[] f(); // 数组类型
        }
    
        @interface MyAnno3 {
            int aa();
            String bb;
        }
    

    4. 注解的作用目标限定以及保留策略限定

    4.1 注解的作用目标限定
    • 使用方式: 在定义注解时,给注解添加 @Target 注解;
        @Target(value={ElementType.Type, ElementType.METHOD, ElementType.FIELD})
        @interface MyAnno2{
    
        }
    
        // ElementType 是枚举类型
        // 可选值: TYPE, FIELD, METHOD, PARAMETER, CONSTRUCTOR, LOCAL_VARIABLE,
        //       ANNOTATION, PACKAGE
    
    4.2 保留策略
    • 源代码文件(SOURCE): 注解只能在源代码中存在,当编译时,就被忽略了;
    • 字节码文件(CLASS): 注解在源代码中存在,然后编译时,会把注解信息放到 class 文件,但 JVM 在加载类时,会忽略注解;
    • JVM (RUNTIME): 注解在源代码,字节码文件中存在,并且在 JVM 加载类时,会把注解加载到 JVM 内存中(它是唯一可反射注解!!)
        // 限定注解的保留策略, Retention 为枚举类型
        @Retention(RetentionPolicy.RUNTIME)
        @interface MyAnno2 {....}
    

    参考资料:

  • 相关阅读:
    深入理解Azure自动扩展集VMSS(1)
    使用ARM和VMSS创建自动扩展的web集群
    使用ARM模板部署自动扩展的Linux VMSS(2)
    使用ARM模板部署自动扩展的Linux VMSS(1)
    Azure上A/D系列虚拟机到DS系列迁移(2)
    ORM进阶操作
    Django之中间件
    restful十项规范
    同源策略与跨域请求
    Django之CSRF问题
  • 原文地址:https://www.cnblogs.com/linkworld/p/7678397.html
Copyright © 2020-2023  润新知