注解(Java程序的一种特殊“注释”,用于工具处理的标注)

1.使用注解

a.含义

        i.注解是放在类,字段,方法,参数前的一种特殊“注释”。
        ii.注释会被编译器直接忽略,注解则可以被编译器打包带进class文件,因此,注解是一种用于标注的“元数据”。
        iii.从JVM角度看,注解对代码逻辑没有任何影响,如何使用注解完全由工具决定。

b.三类注解

        i.由编译器使用的注解,不会编译进.class文件,编译后被编译器扔掉;如:@Override、@SuppressWarnings。
        ii.由工具处理.class文件使用的注解,有些工具在加载class的时候,对class动态处理实现特定功能。这类注解会被编译进.class文件,加载结束后不会加载进JVM,被底层库使用,无需处理。
        iii.程序运行期读取的注解,加载后一直存在于JVM中,最常用的注解。(Java代码读取注解实现功能,JVM并不识别该注解)

c.注意

        i.定义注解时,配置参数类型:
                1.所有基本类型;
                2.String;
                3.枚举;
                4.所有基本类型,String,枚举以及Class的数组。
        ii.注解配置参数必须是常量,所以定义注解时就确定了所有参数的值,正常每个参数都有默认值,如果不设置就使用默认值。
        iii.如果参数名称是value且只有一个参数,那么可以省略参数名称。

2.定义注解

a.含义     

        用@interface来定义注解。注解的参数类似无参方法,用default设定一个默认值(强烈推荐),最常用的参数应命名为value(有且只有它时可以省略参数名称)。

b.元注解(修饰其他注解的注解)

        i.@Target(最常用)
                定义源码被应用于哪些位置。
                1.ElementType.TYPE:类或接口或枚举或Record。
                2.ElementType.FIELD:成员变量字段。
                3.ElementType.METHOD:方法。
                4.ElementType.CONSTRUCTOR:构造方法。
                5.ElementType.PARAMETER:方法参数。
                6.ElementType.LOCAL_VARIABLE:局部变量。
                7.ElementType.ANNOTATION_TYPE:注解。
                8.ElementType.PACKAGE:包。

        ii.@Retention(默认CLASS期间)
                定义了注解的生命周期。
                1.RetentionPolicy.SOURCE:仅编译期间。
                2.RetentionPolicy.CLASS:仅class文件。
                3.RetentionPolicy.RUNTIME:程序运行期(自定义常用!)

        iii.@Documented
                是否将注解信息添加到javadoc文档中。
        iv.@Repeatable(注解可重复,不常用)
                修饰的注解,可在同位置使用多个同样的注解。

        v.@Inherited(继承)
                定义子类是否可继承父类定义的注解。仅针对@Target(ElementType.TYPE)类型的注解有效,并且仅针对class的继承,对interface的继承无效。

c.如何定义注解

        i.使用@interface定义注解类。
        ii.添加参数、默认值;把最常用的参数定义为value(),所有参数都尽量设置默认值。
        iii.添加元注解;必须设置@Targer和@Retention,@Retention一般设置为RUNTIME。

3.处理注解

a.注意

        i.所有注解都是class,都继承自java.lang.annotation.Annotation。
        ii.读取注解,要使用反射,反射API通过Class实例封装了类的所有信息。

b.获取注解 

        i.判断某个注解是否存在于Class、Field、Method或Constructor。
                1.Class.isAnnotationPresent(注解.Class)
                2.Field.isAnnotationPresent(注解.Class)
                3.Method.isAnnotationPresent(注解.Class)
                4.Constructor.isAnnotationPresent(注解.Class)
        ii.用反射API获取注解。
                1.Class.getAnnotation(注解.Class)
                2.Field.getAnnotation(注解.Class)
                3.Method.getAnnotation(注解.Class)
                4.Constructor.getAnnotation(注解.Class)

c.使用注解

        i.定义了注解,本身对逻辑程序没有任何影响,我们自己编写代码来使用注解,JVM不会自动给注解添加任何处理逻辑。
                1.定义注解。

                2.使用注解。

                3.编写代码来使用注解。

4.常用注解

a.@RequestBody和@RequestParam()

        i.@RequestParam()
                1.一般与get请求一起使用,一个方法中可以有多个,用来接收普通参数。
                2.加上该注解,表示参数必传,并且指定前端传过来的参数名。
                3.可以通过required = false设置参数为非必传,非必传时可设置默认值defaultValue = "0"。
        ii.@RequestBody
                1.一般与post请求一起使用,一个方法中只能有一个,用来接收json格式的数据。
                2.将json数据转化成Map形成的key-value键值对
        iii.注意
                1.如果不是放在请求体里可以用@RequestParam()接收,也可以什么都不写。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值