zoukankan      html  css  js  c++  java
  • Java注解的使用

    概念:java提供了一种原程序中的元素关联任何信息和任何元数据的途径和方法。

    Java中的常见注解

    JDK自带注解:

    @Override//覆盖父类的方法        

    @Deprecated//表示方法过时了

    @SuppressWarnings("deprecation")//忽略deprecation警告

    常见第三方注解:

    Spring : @Autowired        @Service          @Repository

    Mybatis :@InsertProvider       @UpdateProvider             @Options

    注解的分类

    按照运行机制分:

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

    2.编译时注解:注解在源码和.class文件中都存在(jdk自带注解)

    3.运行时注解:在运行阶段还起作用,甚至会影响运行逻辑的注解

    按照来源分:

    1.来自JDK的注解

    2.来自第三方的注解

    3.我们自己定义的注解

    元注解:注解的注解

     1 @Target({ElementType.METHOD,ElementType.TYPE})/**注解的作用域
     2 //CONSTRUCTOR(构造方法声明)、FIELD(字段声明)、LOCAL_VARIABLE(局部变量声明)
     3 //METHOD(方法声明)、PACKAGE(包声明)、TYPE(类、接口)
     4 */
     5 @Retention(RetentionPolicy.RUNTIME) /**
     6 //声明周期RUNTIME(运行时存在,可以通过反射读取)、
     7 //CLASS(编译时会纪录到class中,运行时忽略)、
     8 //SOURCE(只在源码显示,编译时会丢弃)*/
     9 @Inherited/**允许子类继承注解,对接口无效,对类有效;只继承类的注解,类下的方法的注解无法继承*/
    10 @Documented/**生成javadoc时包含注解*/
    11 public @interface Description{//使用@interface关键字定义注解
    12     /**
    13      * 成员以无参无异常方式声明
    14      * 成员类型是受限的,合法的类型包括原始类型及String,Class,Annotation,Enumeration
    15      * 可以用default为成员指定一个默认的值
    16      * 如果注解只有一个成员,则成员名必须取名为value(),在使用时可以忽略成员名和赋值号(=)
    17      * 注解类可以没有成员,没有成员的注解称为标识注解
    18      */
    19 //    String desc();
    20 //    String author();
    21 //    int age() default 18;
    22     String value();
    23 }
    创建注解
    1 public interface Person {
    2     public String name();
    3     @Deprecated
    4     //表示方法过时了
    5     public int age();
    6 }
    创建接口
     1 @Description("i am class")
     2 public class Child implements Person {
     3     @Override
     4     @Description("i am method")
     5     public String name() {    
     6         return null;
     7     }
     8     @Override
     9     public int age() {
    10             return 0;
    11     }
    12 }
    实现接口
     1 public class Test {
     2     
     3     @SuppressWarnings({ "rawtypes", "unchecked" })
     4     public static void main(String[] args) {
     5         try {
     6             //1.使用类加载器加载类
     7             Class c = Class.forName("com.wzyy.zujie.Child");
     8             //2.找到类上面的注解,判断这个类com.wzyy.zujie.Child上是否存在Description.class这个注解
     9             boolean isExist = c.isAnnotationPresent(Description.class);
    10             if(isExist){
    11                 //3.拿到注解实例
    12                 Description d = (Description) c.getAnnotation(Description.class);
    13                 System.out.println(d.value());//i am class
    14             }
    15             //4.找到方法上的注解
    16             Method[] ms = c.getMethods();
    17             for(Method m:ms){
    18                 //第一种解析方法,判断这个方法上是否存在Description注解
    19 //                boolean isMExist = m.isAnnotationPresent(Description.class);
    20 //                if(isMExist){
    21                     //存在就得到这个方法上的Description注解
    22 //                    Description d = m.getAnnotation(Description.class);
    23 //                    System.out.println(d.value());//i am method    
    24 //                }
    25                 //第二种解析方法,得到这个方法上所有的注解,判断是否是Description
    26                 Annotation[] as =m.getAnnotations();
    27                 for(Annotation a:as){
    28                     if(a instanceof Description){
    29                         Description d = (Description) a;
    30                         System.out.println(d.value());//i am method
    31                     }
    32                     
    33                 }
    34             }
    35             
    36         } catch (ClassNotFoundException e) {
    37             e.printStackTrace();
    38         }
    39         
    40     }
    41 //    /**使用注解的语法:@<注解名>(<成员名1>=<成员值1>,<成员名2>=<成员值2>....)*/
    42 //    @Description(desc="aaa",author="bb",age=22)
    43 //    public String eyeColor(){    
    44 //        return "red";
    45 //    }
    46 }
    测试类解析注解
  • 相关阅读:
    付出给人一种美好的感觉
    表连接查询 条件在On与Where后区别
    Json与实体类 转化
    算法的时间复杂度和空间复杂度详解
    真的理解同步和异步了吗?
    花生壳申请域名并进行内网穿透
    XML 反序列化
    .Net 发送邮件
    BootStrap DataTable 时间日期列排序
    SQL Server 动态SQL拼接
  • 原文地址:https://www.cnblogs.com/wwzyy/p/4971920.html
Copyright © 2011-2022 走看看