一.什么是注解:
注解是标记,也可以理解成是一种应用在类、方法、参数、属性、构造器上的特殊修饰符。注解作用有以下三种:
第一种:生成文档,常用的有@param@return等。
第二种:替代配置文件的作用,尤其是在spring等一些框架中,使用注解可以大量的减少配置文件的数量。
第三种:检查代码的格式,如@Override,标识某一个方法是否覆盖了它的父类的方法。
二.注解的底层实现原理:
注解的底层也是使用反射实现的,我们可以自定义一个注解来体会下。注解和接口有点类似,不过申明注解类需要加上@interface,注解类里面,只支持基本类型、String及枚举类型,里面所有属性被定义成方法,并允许提供默认值。
java 5.0开始,在java.lang.annotations中提供了四种元注解,专门注解其他的注解:@Target(注解用于什么地方)、@Retention(注解运行状态)、@Documented(生成说明文档,添加类的解释)、@Inherited(允许子类继承父类中的注解)
@Target? — —注解用于什么地方 TYPE, //给类(型)注解 @Retention — —注解运行状态 SOURCE, //源码状态运行, @Documented — — 生成说明文档,添加类的解释 @Inherited — —允许子类继承父类中的注解。 |
参考代码: |
@Target({ElementType.CONSTRUCTOR, ElementType.METHOD, ElementType.PARAMETER, ElementType.FIELD, ElementType.ANNOTATION_TYPE}) /** } |
boolean required() default true; 这句代码表明类的默认值是true
个人看法:(不确定正确与否) bean 我们姑且叫做注解(Spring注解) 代码中加载了注解的相应代码块被框架标记(就像是游戏中的仇恨标记一样) 程序通过URL访问时按照如下过程 1、框架识别URL 2、在controller注解中匹配URL(通过注解的value或者path) 3、在service注解中匹配相关接口 4、在Repository注解中匹配数据库查询相关操作接口以及实现 这些就相当于以注解为单位,用注解(零件)组合成一个完整的操作(产品) (零件 --> 产品 的关系) 而注解功能的实现则是基于java的反射机制来实现的 反射机制(粗略的看法):调用一个类(比如说是工具类)可以获得使用该类下的任何一个属性或者是方法