对注解的理解

1.什么是注解?
  -就是通过一个符号实现一个功能,让开发变得更简单
  -每个注解的符号都是提前定义好的
  -每个注解的背后都有一个强大的处理程序,处理相关功能
  -注解使用的形式:@xxx(属性)
2.常用的注解
  -@Override:强制重写注解
  -@Test:测试用例注解
  -@Deprecated:声名过时注解
  -@WebServlet:Servlet注解
  -@WebFilter:过滤器注解
3.注解的元注解
  -元注解指用于注解的注解
  -元注解是用于定义注解
  -常用的元注解
    @Target:指定注解使用的位置
        -注解使用的位置:类、方法、属性、参数、注解
        -Target注解定义该注解使用的位置由ElementType枚举指定
            -TYPE:类上可用
            -FIELD:属性可用
            -METHOD:方法可用
            -PARAMETER:参数可用
            -CONSTRUCTOR:构造器可用
    @Retention:指定定义的注解在什么时候起作用
            -该注解由RetentionPolicy枚举指定起作用的范围
                -SOURCE:源码起作用
                -CLASS:字节码上起作用(编译后仍然存在)
                -RUNTIME:运行期起作用
    @Documented:指该注解在生成文档是否可用
4.定义注解
    注解中包含"属性"
    注解通过@interface来声名

声名一个注解:

package com.xxx.annotation;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
/*声名一个注解*/
@Target({ElementType.TYPE,ElementType.METHOD,ElementType.FIELD})//在类和方法、属性上可用
@Retention(RetentionPolicy.RUNTIME)//在运行时起作用
public @interface MyAnnotation {

    String name() default ""; //注意:加上默认值后,使用注解时,里面参数的参数根据自己的需求写
    int age() default 0;
    //定义一个属性
     String value() default "";
}

声名注解要由特殊的用途,而现在的这个声名的注解是没有用的,咱们只是写了注解的形式,而下面展示的代码只是使用,但是本身并没有什么作用

package com.xxx.annotation;

@MyAnnotation //定义在类上
public class AnnotationTest {

    @MyAnnotation(age = 18,value = "100") //定义在属性上
    private String uname;

    @MyAnnotation(value = "admin")//定义在方法上
     public void test(){
     }
}

下面看代码,下面就是获得某一方法上面的所有注解,然后通过注解类型获得方法上定义的具体注解,获得后获得其注解传的参数值,然后获得该参数之后进行加工处理,具体业务,具体分析

package com.xxx.annotation;

import java.lang.annotation.Annotation;
import java.lang.reflect.AnnotatedType;
import java.lang.reflect.Field;
import java.lang.reflect.Method;

public class ParseAnnotation {
    public static void main(String[] args) throws Exception{

        //获得类的class对象
        Class cla = AnnotationTest.class;
        //获得cla中test方法
        Method method = cla.getDeclaredMethod("test");

        //获得方法的所有注解
        Annotation[] annotations = method.getDeclaredAnnotations();
        for (Annotation annotation : annotations) {
            System.out.println(annotation);
        }

        //根据注解类型获得方法上定义的具体注解
        MyAnnotation declaredAnnotation = method.getDeclaredAnnotation(MyAnnotation.class);
        var age = declaredAnnotation.age();
        var value = declaredAnnotation.value();
        System.out.println(age);
        System.out.println(value);
    }
}

运行结果:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值