java注解的简单使用

原创 2016年05月30日 15:20:13

今天要来说一下java的注解api,记得以前写子类重写父类的方法时,都会看到一个@Override的东西,当时不知道这玩意是什么,现在才知道是javase5中内置的标准注解。然后第一次真正了解注解的时候是在使用xutils框架的时候,那时候觉得注解很牛逼,使用起来很方便,但是完全不知道是怎么实现的,最近因为项目用到了注解,所以重新学习了一遍,了解了一下使用过程,特地来记录一下学习的内容。废话不多说,代码是最后的老师。

java注解的简介:

java的注解是JDK1.5及以后版本引入的一个特性,与类、接口、枚举是在同一个层次。它可以声明在包、类、字段、方法、局部变量、方法参数等的前面,用来对这些元素进行说明,注释。具体见java注解-百度百科

java注解的使用流程:

定义一个注解类:
<span style="font-family:SimSun;font-size:18px;">@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface Get {
    String value() default "";
}</span>

用@Target指定ElementType属性
<span style="font-family:SimSun;font-size:18px;">public enum ElementType {
    // 用于类,接口,枚举但不能是注解
    TYPE,
    // 字段上,包括枚举值
    FIELD,
    // 方法,不包括构造方法
    METHOD,
    // 方法的参数
    PARAMETER,
    // 构造方法
    CONSTRUCTOR,
    // 本地变量或catch语句
    LOCAL_VARIABLE,
    // 注解类型(无数据)
    ANNOTATION_TYPE,
    // Java包
    PACKAGE
}</span>
@Retention限制注解的使用范围,在什么地方会保留,在什么地方会失效。
<span style="font-family:SimSun;font-size:18px;">public enum RetentionPolicy {
    //此类型保留在源码当中,会被编译器所丢弃
    SOURCE,
    //此类型注解会保留在class文件中,但JVM会忽略它
    CLASS,
    //此类型注解会保留在class文件中,JVM会读取它
    RUNTIME
}</span>
既然定义了一个注解类,我们当然要在代码中使用它了:
<span style="font-family:SimSun;font-size:18px;">@Get("http://api/reflectannotionproxy/getData")
    String getData();//具体方法名与返回值</span>
我们在程序当中使用了注解方法,那如何去读取使用了注解信息的方法呢?这个时候我们又要用到java的反射机制了:
<span style="font-family:SimSun;font-size:18px;">try{
<span style="white-space:pre">	</span>Class c = Test.class;
        Method method = c.getDeclaredMethod("getData");
        if(method.isAnnotationPresent(Get.class)){//判断该方法上是否有Get注解
            Get get = method.getAnnotation(Get.class);//获取注解类对象
              if(get != null){
                 String url = get.value();//获取注解类上的参数,就是那一串url
            }
        }catch (Exception e){
            e.printStackTrace();
        }</span>

通过这种方式,可以获取的这个方法的值,然后我们可以对这个值进行处理,我们还可以去声明一个方法参数注解类,如下:
<span style="font-family:SimSun;font-size:18px;">@Target(ElementType.PARAMETER)
@Retention(RetentionPolicy.RUNTIME)
public @interface Parames {
    String value() default "";
}</span>

这个时候我们可以把上面的代码改动一下,获取方法的值,以及参数名
<span style="font-family:SimSun;font-size:18px;">@Get("http://api/reflectannotionproxy/getData")
    String getData(@Parames("type") String type, @Parames("description") String description);</span>

然后我们同样用反射的方式去获取它:
<span style="font-family:SimSun;font-size:18px;">try{
            Class c = Test.class;
            Method method = c.getDeclaredMethod("getData");
            if(method.isAnnotationPresent(Get.class)){//判断该方法上是否有Get注解
                Get get = method.getAnnotation(Get.class);//获取注解类对象
                if(get != null){
                    String url = get.value();//获取注解类上的参数,就是那一串url
                    ArrayList<String> arrayList = new ArrayList<>();
                    Annotation[][] annotations = method.getParameterAnnotations();//获取方法参数的二位数组
                    if (annotations != null && annotations.length > 0) {
                        for (int i = 0;i<annotations.length;i++) {
                            Annotation[] annotations1 = annotations[i];
                            Log.i("info", "annotations1========" + annotations1);
                            for (Annotation annotation : annotations1) {
                                Log.i("info", "annotation========" + annotation);
                                if (annotation instanceof Parames) {
                                    Parames parames = ((Parames) annotation);
                                    arrayList.add(parames.value());//获得方法参数名("type","description"),具体参数由你调用方法时传入
                                }
                            }
                        }
                    }
                }
            }
        }catch (Exception e){
            e.printStackTrace();
        }</span>

这就是java注解常见的一些使用方法,用注解可以打造类restful风格的网络请求框架!



版权声明:本文为博主原创文章,未经博主允许不得转载。

java注解简单使用

java注解简单使用在发开过程中一直都有使用到注解,今天总算想起来研究一下注解的实现过程了。直接开车吧// 自定义注解 // 这里已经实现了Annotation // 注意,注解只有在反射调用的方式下...
  • big_sea_m
  • big_sea_m
  • 2017年12月03日 16:40
  • 37

JAVA中注解的简单使用

Java SE5内置了三种标准注解:      @Override,表示当前的方法定义将覆盖超类中的方法。      @Deprecated,使用了注解为它的元素编译器将发出警告,因为注解@Dep...
  • u014042146
  • u014042146
  • 2015年09月24日 17:50
  • 298

java中注解的原理和实现机制

java中注解的实现原理和机制 一.什么是注解:      注解是标记,也可以理解成是一种应用在类、方法、参数、属性、构造器上的特殊修饰符。注解作用有以下三种:        第一种:生成文档,常用的...
  • shuaipu813
  • shuaipu813
  • 2016年10月14日 17:57
  • 4811

java注解,@,注解有什么用?

@是java注解,即annotation。 1可以理解为插件,是代码级别的插件,在类的方法上写:@XXX,就是在代码上插入了一个插件。 2Java注解是附加在代码中的一些元信息,用于一些工具在编译、运...
  • Ideality_hunter
  • Ideality_hunter
  • 2016年11月11日 14:44
  • 6545

一个简单的、结合注解使用的RxBus

网上有许多实现简单的RxBus,不过思来想去,还是自己写一个用得顺手。最核心的内容依然是用RxJava中的Subject。只是通过注解修饰事件处理,简化了调用步骤。项目地址:ViTess/RxBusA...
  • vite_s
  • vite_s
  • 2016年11月22日 20:51
  • 1443

Java注解的原理(通俗易懂)

自Java5.0版本引入注解之后,它就成为了Java平台中非常重要的一部分。开发过程中,我们也时常在应用代码中会看到诸如@Override,@Deprecated这样的注解。这篇文章中,我将向大家讲述...
  • u014563989
  • u014563989
  • 2017年03月06日 09:53
  • 1815

Java注解一 注解的含义

Java注解一 注解的含义在学习Spring框架的时候就觉得注解很神奇,为什么简单的注解有这么神奇的功能,一直想去了解其中的奥秘,可惜的是到今天才实践。在Spring框架中一个@Controller ...
  • jhfsdfs
  • jhfsdfs
  • 2016年05月21日 14:23
  • 1400

Java 使用动态代理来动态修改注解值

java 中定义注解都是在编写代码时,如果我们想在运行中根据某个条件来修改注解的值。是无法注解操作的,但是通过动态代理是可以实现的。这里需要用到的是Proxy 动态代理第一步得到代理实例:Invoca...
  • jiangzeyin_
  • jiangzeyin_
  • 2017年11月02日 09:32
  • 463

深入理解Java 注解原理

注解(Annotation)是JDK1.5引入的新特性,包含在java.lang.annotation包中,它是附加在代码中的一些元信息,将一个类的外部信息与内部成员联系起来,在编 译、运行时进行解析...
  • zhang0558
  • zhang0558
  • 2016年09月24日 00:41
  • 6070

Java注解的实际应用案例讲解

前言注解确实是一个很强大的功能,是的开发效率大幅度提高。在Android开发中,比较有名气的注解框架当属:Butterknife。https://github.com/JakeWharton/butt...
  • dabaoonline
  • dabaoonline
  • 2016年08月10日 14:20
  • 875
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:java注解的简单使用
举报原因:
原因补充:

(最多只允许输入30个字)