Java注解

    xiaoxiao2021-03-25  106

    注解(Annotation)

    注解的分类

    按运行机制分类

    .源码注解:在源码中存在,编译成.class文件后就不存在了 .编译时注解:注解在源码和.class文件中都存在(JDK自带注解都属于编译时注解) .运行时注解:在运行阶段还起作用,甚至会影响运行逻辑的注解,可通过反射读取(@Autowired)

    按来源分类

    .来自JDK的注解 .来自第三方的注解 .自己定义的注解

    元注解

    给注解进行注解

    JDK自带注解

    @Override:重写 @Deprecated:过时 @Suppvisewarnings:忽略警告

    第三方注解

    Spring

    @Autowired:自动注入 @Service @Repository

    Mybatis

    @InsertProvider:插入 @UpdateProvider:更新 @Options

    自定义注解

    @Target({ElementType.METHOD,ElementType.TYPE}) /*Target是注解的作用域 ROURCE、CLASS、RUNTIME*/ @Retention(RetentionPolicy.RUNTIME) /*Retention是生命周期*/ @Inherited /*Inherited允许子类继承*/ @Documented /*Documented,生成javadoc时会生成注解信息*/ public @interface Description{ //.使用@interface关键字定义注解 String desc(); //.成员以无参无异常方式声明 int age() default 18; //.可以用default为成员指定一个默认值 /*如果注解只有一个成员,则成员名必须取名为value(),在使用时可以忽略成员名和赋值号(=)*/ /*注解类可以没有成员,没有成员的注解称为标识注解*/ /* 成员类型只能为基本数据类型及String,Class,Annotation,Enumeration */

    解析注解

    通过反射获取类、函数或成员上的运行时注解信息,从而实现动态控制程序运行的逻辑

    步骤

    .使用类加载器动态加载类 Class c = Class.forName("com.test.Child"); .找到类上面的注解 boolean isExist = c.isAnnotationPresent(Description.class) .拿到注解实例 Description d = (Description)c.getAnnotation(Description.class) /*Description是注解名*/
    转载请注明原文地址: https://ju.6miu.com/read-11582.html

    最新回复(0)