美文网首页工作生活
全面解析Java注解

全面解析Java注解

作者: Deque | 来源:发表于2019-07-07 23:14 被阅读0次

    一、介绍

    例:

    public class Sun extends Father{
      
      @Override
      public String hairColor(){
        return "blue";
      }
    
      @Deprecated
      public String hairColorOld(){
        return "blue";
      }
    
      @SuppressWarnings({"rawtypes","unused"})
      public void warning(){
        Map m;
      }
    
    }
    

    1、为什么要学习注解?学完能做什么?

    • 1、能够读懂别人代码,特别是框架相关的代码
    • 2、让编程更加简洁,代码更清晰,自定义注解,解决问题

    概念:

    Java提供了一种原程序中的元素关联任何信息和任何元素的途径和方法(概念比较抽象,看不懂没关系)。

    学习路径

    • Java中的常见注解
    • 注解的分类
    • 自定义注解
    • 注解的应用实例

    二、Java中常见注解

    JDK自带注解

    Person 接口类

    public interface Person {
        
        public String name();
        
        public int age();
        
        @Deprecated //表示该方法过时了
        public void sing();
    
    }
    
    

    Child类 实现 Person类

    public class Child implements Person{
    
        @Override   //告诉编译器,覆盖父类的方法
        public String name() {
            return null;
        }
    
        @Override
        public int age() {
            return 0;
        }
    
        @Override
        public void sing() {
            
        }
    
    }
    

    Test 测试类

    public class Test {
        public void sing() {
            Person p = new Child();
            p.sing();
        }
    }
    

    @Override:

    @Deprecated:

    @SuppressWarnings:

    第三方注解

    Spring:

    @Autowired 自动装配
    @Service Service层
    @Repository

    Mybatis:

    @InsertProvider
    @UpdateProvider
    @Options

    三、注解的分类

    按照运行机制分类:

    • 源码上注解:注解只在源码中存在,编译成.class文件就不存在了。

    • 编译时注解:注解在源码和.class文件中都存在(例如JDK注解:@Override@Deprecated@Suppvisewarnings)。

    • 运行时注解:运行阶段还起作用,甚至会影响运行逻辑的注解(例如:Spirng提供的@Autowired注解,程序运行时,把成员变量自动注入)。

    按照来源分类:

    • 来自JDK的注解

    • 来自第三方的注解(比如框架里的)

    • 自定义注解

    元注解:给注解进行注解

    原注解示例,如下(一下为通过原注解自定义的注解Description):

    @Target({ElementType.METHOD,ElementType.TYPE})
    @Retention(RetentionPolicy.RUNTIME)
    @Inherited
    @Documented
    public @interface Description {  //使用关键字@interface定义注解 Description
        String desc();               //成员以无参无异常方式声明
        String author();
        int age() default 18;     //用default为成员指定默认值
    }
    

    四、自定义注解

    原注解详解

    1、@Target({ElementType.METHOD,ElementType.TYPE}) 声明自定义注解的作用域
    参数有:

    • CONSTRUCTOR(构造方法)
    • FIELD(字段声明)
    • LOCAL_VARIABLE(局部变量声明)
    • METHOD(方法声明)
    • PACKAGE(包声明)
    • PARAMETER(参数声明)
    • TYPE(类,接口)

    2、 @Retention(RetentionPolicy.RUNTIME) 注解的声明周期
    参数有:

    • SOURCE(只在源码中显示,编译时丢弃)
    • CLASS(编译时会记录到class中,运行时忽略)
    • RUNTIME(运行时存在,可以通过反射读取)

    3、 @Inherited 表示该注解对class使用时,可以被其子类继承

    4、@Documented 表示生成javadoc是会包含注解的信息

    自定义注解

    自定义注解 Description

    @Target({ElementType.METHOD,ElementType.TYPE})
    @Retention(RetentionPolicy.RUNTIME)
    @Inherited
    @Documented
    public @interface Description {  //使用关键字@interface定义注解 Description
        String desc();               //成员以无参无异常方式声明
        String author();
        int age() default 18;     //用default为成员指定默认值
    }
    

    使用自定义注解

    自定义注解的使用

    @<注解名>(<成员名1>=<成员值1>,<成员名1>=<成员值1>,...)

    示例:

    @Description(desc="I am eyeColor", author="xiaowang", age=18)
    public String eyeColor(){
        return "red";
    }
    

    自定义注解代码演示

    五、项目实战

    相关文章

      网友评论

        本文标题:全面解析Java注解

        本文链接:https://www.haomeiwen.com/subject/gkedhctx.html