注解(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