为了账号安全,请及时绑定邮箱和手机立即绑定

注解的原理是什么

课程没有说明怎么实现的

正在回答

2 回答

你是说为什么注解能做到这个吧。

官方定义的,类似于在代码中打一个标记,有分编译时和运行时。

对注解进行解析的代码在编译器和运行时中,简单说就是编译器和运行时发现类似的@xxx就看看是不是有对应的注解类型,有就对其进行相应的处理。

至于如何去找这个注解标记,那就去看看编译器和jvm的源码了,一般学习不用纠结。

就好比定义一个整型变量就是用int,这就是语法!

如果第三方的话,一般是属于运行时注解,通过反射调用的。即通过反射调用某个方法,加载某个类等等操作的时候,获取注解信息(反射api有提供方法获取),然后针对相应的注解进行处理。

7 回复 有任何疑惑可以回复我~
#1

花绝世

最后针对相应的注解进行处理,有很多,看你业务逻辑。 如:@Autowired注解 public class Xx{ @Autowired private Yy yy; } 通过反射实例化Xx类的对象时,检测到有@Autowired注解注解的方法,你就可以创建一个Yy类的对象,赋值给yy。
2016-06-18 回复 有任何疑惑可以回复我~
#2

perpetual_sunrise 提问者

非常感谢!
2016-06-18 回复 有任何疑惑可以回复我~

- @Retention【关于注解的生命周期RetentionPolicy】

    - .SOURCE,只保留在源文件层面,当.java被编译成.class的时候,此注解被丢弃

    - .CLASS,(默认值)只保留在class文件,不会加载到jvm中。当jvm加载class文件的时候,此注解被丢弃

    - .RUNTIME jvm加载被编译后的class文件后,此注解依然有效

- @Documented【javadoc 文档相关】

- @Target【指明了此注解用的范围,是个ElementType】

    - TYPE :class,interface(当然也包括annotation 类型)

    - FIELD:属性,包括一些枚举常量

    - METHOD:方法

    - PARAMETER:方法内参数

    - CONSTRUSTOR:构造方法

    - LOCAL_VARIABLE:局部变量

    - ANNOTATION_TYPE:注解类型声明

    - PACKAGE:包

    - TYPE_PARAMETER:参数类型

    - TYPE_USE

- @Inherited

    - 在超类A的注解test被@Inherited注解后,该注解(test)被A'注解(@test),A'的子类就继承了超类A的注解。(前提是子类没有被任何注解应用)


- @Repeatable【多个属性值的注解】

    - @Repeatable后面括号的类相当于一个容器注解


0 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消

注解的原理是什么

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信