android高级进阶1-Android开发知识

android框架设计基础--java注解全面解析

2018-01-30  本文已影响37人  android的那点事

最近在看第三方的优秀开源库源码,发现好多地方都用到了注解,这里,觉得有必要对java注解做个总结,方便以后自己查阅及大家学习了解.

本文主要用以下三方面讲解:

概念

Java提供了一种原程序中的元素关联任何信息和任何元数据的途径和方法。
Java1.5引入了注解,当前许多java框架中大量使用注解,如Hibernate、Jersey、Spring。注解作为程序的元数据嵌入到程序当中。注解可以被一些解析工具或者是编译工具进行解析。我们也可以声明注解在编译过程或执行时产生作用。

java自带的注解

java自带的注解其实不多,有三种标准注解和四种元注解,下面简单介绍下:

三种标准注解:

这三个注解应该大家都明白,在我们日常的代码很常见,这里就不多说了。

元注解:

元注解,很重要,后面讲的自定义注解,都会用到,所以后面的好好了解下:

这三个类型ElementType.TYPE_USE,ElementType.TYPE_PARAMETER是Java8新增的。

自定义注解

自定义注解在框架设计上得比较多,因为使用注解可以让编程更加简洁,代码更加清晰;哈哈,还有一条就是装逼,一看就高大上,接下来看如何自定义注解,及如何使用自定义注解;

如何自定义注解?
@Target({ElementType.METHOD,ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Inherited
@Documented
public @interface Persion {
    String name();
    String sex();
    int age() default 20;
}

1.上面的代码是一个完整的自定义注解,创建自定义注解和创建一个接口相似,但是注解的interface关键字需要以@符号开头;

2.@Target表示此注解的作用域,作用于方法,类,有多个作用域时用{}括起来,之间用,间隔开;

3.@Retention 表示该注解的生命周期,此例子说明该注解的生命周期是被虚拟机保存,可用反射机制读取

4.成员是以无参无异常方式声明,可以用default为成员指定一个默认值,成员类型是受限的,合法的类型包括基本类型、String、Enums、Annotation,Class;还有一个重要的要注意,如果注解只有一个成员时,则成员名必须取名为value();在使用时可以忽略成员名和赋值号(=)

5.注解类可以没有成员,没有成员的注解称为标识注解;

如何使用注解
@Persion(name = "Xiaomi",sex = "man",age = 15)
public class Xiaomi {
    String fatherName;
}

看上面代码,看是不是使用很简单,只要在类的上面加上@注解名(成员1=成员1值,成员2=成员2值,...)就行;

解析注解
try {
            Class c=Class.forName("com.sz.annotationdemo.Xiaomi");
            if (c==null){
                Log.i("ms","Persion class不存在");
            }else{
                boolean isExist=c.isAnnotationPresent(Persion.class);
                if (isExist){
                    Persion persion= (Persion) c.getAnnotation(Persion.class);
                   Log.i("ms",persion.name()+",,,"+persion.sex()+",,,"+persion.age());
                }else {
                    Log.i("ms","Persion注解不存在");
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }

通过反射获取类、函数或成员上运行时注解信息,从而实现动态控制程序运行的逻辑。
使用forName()方法加载类,并使用getAnnotation(Persion.class)检查该类是否带有@Persion注解。
注解的继承只能作用在类上,方法上的注解不会被继承,Interface中的所有注解不会被继承。
运行后得到结束:

01-30 17:52:53.638 11283-11283/? I/ms: Xiaomi,,,man,,,15

哈哈,是不是通过自定义注解,注入,然后就可以获取注入的数据,到这里应该明白了吧.以后就可以实际项目解决注解问题了.

本人做android开发多年,以后会陆续更新关于android高级UI,NDK开发,性能优化等文章,更多请关注我的微信公众号:谢谢!
android的那点事.jpg
上一篇下一篇

猜你喜欢

热点阅读