注解是java学习中非常重要,但是一直被我们忽略的一环,因为大部分时候,我们只需要知道怎么用就可以了。
比如SpringBoot,我们通过一个注解,就可以直接把项目跑起来,然后监听8080端口,什么Tomcat,servlet,愣是一个都没见到。更不得了的是,你连web.xml都看不到。
注解可真是神器的玩意儿,在工作中,我们随手打一个@Controller,就相当于是一个servlet。
反正大家都这么写,我们也就懒得去关心其中的原理。一开始我也疑惑,到底是怎样的魔力,使得注解如此好用,让人上瘾呢?
本文不贴代码,只聊天。
1.注解是什么?
注解是一种特殊的接口,如果你把注解的class拿去反编译就会知道这一点。我们写注解,本质还是在写一个接口,这是一个特殊的接口。
2.注解里面有什么?
因为注解是一个接口,所以里面可以写方法。当然,是抽象方法。只不过,你的方法名要看起来像是一个属性名。比如,你不要写什么getValue,而应该就写value,这些方法名是注解的属性。
记住这一点,真的很重要,可以让你少走很多弯路。
3.注解什么时候起作用?
注解编写完毕后,可以打在类上,属性上,还有方法上。你需要通过target元注解来声明到底要打在什么地方。然后,你必须要有个地方去读取这个注解,比如springboot框架,在框架里面必然有地方去解析@Controller。
在你启动项目的时候,springboot就去寻找哪些class打了@Controller注解,找到一个就收藏一个,自动帮你new好了存起来。
记住,注解的意义就是在某个时刻被读取,然后做一些事情。如果你自己写了一个注解,却没有任何读取的地方,那你就是在耍流氓。好好的一个类,被你冷不丁打一个@MyAnnotation注解,却没有任何解析的地方,你觉得类能开心吗?
4.保留策略
保留策略是打在注解上的注解,就是告诉你这个注解可以保存到什么时候,我们自己写注解一般是为了方便开发,所以要保留到运行时。
5.想炫技?
你自己写注解的话,可以用来定制某些东西,方便开发,有一些炫技的成分。不过大部分奇思妙想,早就有人做了,都是用的注解,然后打成jar包,这就是框架。
任何框架的作者,基本都不希望你去了解他们在什么时候读取了注解,然后做了哪些事情的?他们只希望使用者直接打注解就行了。