java注解浅析

来源:互联网 发布:淘宝卖家怎么设置限购 编辑:程序博客网 时间:2024/04/29 03:12
注解的定义:java提供了一种原程序中的元素关联任何信息和任何元数据的途径和方法
注解的本质是接口,并且都继承自根接口Annotation



java注解分类:
按照运行机制分
源码注解(SOURCE):只存在于源码中,编译成.class文件就不存在了
编译时注解(CLASS):存在于源码和.class文件中(Override)
运行时注解(RUNTIME):运行阶段还起作用,甚至影响运行逻辑(Autowired)

安照来源分
JDK、第三方、自定义



JDK中的注解(位于rt.jar的java.lang包):
1.@Override 重写
2.@Deprecated 过时
3.@SuppressWarnings 阻止警告
4.@SafeVarargs 抑制“堆污染”警告(jdk7)
5.@FunctionalIterface (jdk8)如果接口中只有一个抽象方法,可以包含多个默认方法或多个static方法),该接口称为函数式接口。
@FunctionalInterface就是用来指定某个接口必须是函数式接口,否则就会编译出错


java第三方注解:
比如Hibernate和sping和Mybatis等框架的注解,这些框架的注解都基于jkd的元注解


元注解:定义注解的注解
@Target:注解用于哪些元素(作用范围)
@Retention:生命周期
@Inherited:允许子类继承
@Documented:生成javadoc时会包含注解


作用范围(java元素):包、类、字段、构造方法、方法、方法的参数、局部变量、注解
生命周期:源文件SOURCE、编译CLASS、运行时RUNTIME


自定义注解示例:
public @interface Description {
  String desc();
  String author();
  int age() default 18;
}
*用@interface关键字定义注解
*成员以无参无异常方式声明
*可以用default为成员指定一个默认值
*成员类型是受限的,合法的类型包括原始类型以及String、Class、Annotation、Enumeration
*如果注解只有一个成员,则成员名必须取名为value(),在使用时可以忽略成员名和赋值号 =
*注解类可以没有成员,没有成员的注解称为标识注解,比如spring框架的@Component


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


*若定义注解时有用@Inherited,父类方法上的注解可以被子类方法(非重写方法)继承,而接口上的注解不会被实现类继承
*当方法被重写后,父类方法上的Annotation将不会被继承







0 0
原创粉丝点击