Android 最火框架XUtils之注解机制具体解释

在上一篇文章Android
最火的高速开发框架XUtils
中简介了xUtils的基本用法,这篇文章说一下xUtils里面的注解原理。

先来看一下xUtils里面demo的代码:

@ViewInject(R.id.tabhost)
    private FragmentTabHost mTabHost;
@ViewInject(R.id.big_img)
    private ImageView bigImage;

可能好多人一看就说这是个what,事实上这是Java core里面的内容,做JavaEE的应该非常熟悉,像著名的spring框架就用了大量的注解。那究竟什么是注解呢?以下具体解说一下Java注解:

注解(Annotation) 为我们在代码中加入信息提供了一种形式化的方法,是我们能够在稍后某个时刻方便地使用这些数据(通过 解析注解 来使用这些数据)。常见的作用有下面几种:

  • 生成文档。

    这是最常见的。也是java 最早提供的注解。

    经常使用的有@see @param @return 等

  • 跟踪代码依赖性,实现替代配置文件功能。

    比較常见的是spring 2.5 開始的基于注解配置。作用就是降低配置。

    如今的框架基本都使用了这样的配置来降低配置文件的数量。也是

  • 在编译时进行格式检查。如@override 放在方法前,假设你这种方法并非覆盖了超类方法。则编译时就能检查出。

包 java.lang.annotation 中包括全部定义自己定义注解所需用到的原注解和接口。如接口java.lang.annotation.Annotation 是全部注解继承的接口,而且是自己主动继承。不须要定义时指定,类似于全部类都自己主动继承Object。

Java注解是附加在代码中的一些元信息,用于一些工具在编译、执行时进行解析和使用,起到说明、配置的功能。注解不会也不能影响代码的实际逻辑。只起到辅助性的作用。包括在
java.lang.annotation 包中。

Annotation类型里面的參数该怎么设定:

第一,仅仅能用public或默认(default)这两个訪问权修饰.比如,String value();这里把方法设为defaul默认类型.

第二,參数成员仅仅能用基本类型byte,short,char,int,long,float,double,boolean八种基本数据类型和      String,Enum,Class,annotations等数据类型,以及这一些类型的数组.比如,String value();这里的參数成员就为String.

第三,假设仅仅有一个參数成员,最好把參数名称设为"value",后加小括号.

1、元注解

元注解是指注解的注解。包含  @Retention @Target @Document @Inherited四种。

1.1、@Retention: 定义注解的保留策略

@Retention(RetentionPolicy.SOURCE)//注解仅存在于源代码中,在class字节码文件里不包括

@Retention(RetentionPolicy.CLASS)// 默认的保留策略,注解会在class字节码文件里存在,但执行时无法得

@Retention(RetentionPolicy.RUNTIME)// 注解会在class字节码文件里存在,在执行时能够通过反射获取到

1.2、@Target:定义注解的作用目标

其定义的源代码为:

@Documented

@Retention(RetentionPolicy.RUNTIME)

@Target(ElementType.ANNOTATION_TYPE)

public @interface Target {

ElementType[] value();

}

@Target(ElementType.TYPE)   //接口、类、枚举、注解

@Target(ElementType.FIELD) //字段、枚举的常量

@Target(ElementType.METHOD) //方法

@Target(ElementType.PARAMETER) //方法參数

@Target(ElementType.CONSTRUCTOR)  //构造函数

@Target(ElementType.LOCAL_VARIABLE)//局部变量

@Target(ElementType.ANNOTATION_TYPE)//注解

@Target(ElementType.PACKAGE) ///包

当中的@interface是一个keyword,在设计annotations的时候必须把一个类型定义为@interface,而不能用class或interfacekeyword,由以上的源代码能够知道,他的elementType 能够有多个,一个注解能够为类的,方法的,字段的等等。

1.3、@Document:说明该注解将被包括在javadoc中

1.4、@Inherited:说明子类能够继承父类中的该注解

2、java 注解的自己定义

以下是自己定义注解的一个样例

@Retention(RetentionPolicy.RUNTIME)定义的这个注解是注解会在class字节码文件里存在。在执行时能够通过反射获取到。

@Target({ElementType.TYPE,ElementType.METHOD})因此这个注解能够是类注解,也能够是方法的注解

这样一个注解就自己定义好了,当然注解里面的成员能够为主要的数据类型,也能够为数据。Object等等

大概了解了一下Java注解机制,以下就说一说xUtils里面用到的注解,以及思维流程:

package com.lidroid.xutils.view.annotation;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
public @interface ContentView {
    int value();
}

以上是ContentView的注解,一些声明、參数。

 private static void injectObject(Object handler, ViewFinder finder) {

        Class<?

> handlerType = handler.getClass();

        // inject ContentView
        ContentView contentView = handlerType.getAnnotation(ContentView.class);
        if (contentView != null) {
            try {
                Method setContentViewMethod = handlerType.getMethod("setContentView", int.class);
                setContentViewMethod.invoke(handler, contentView.value());
            } catch (Throwable e) {
                LogUtils.e(e.getMessage(), e);
            }
        }}

以上是ViewUtils里面的一个静态注解对象函数,里面用到了上面声明的ContentView注解。getAnnotation是得到注解对象。handler是我们的activity传进来的指针,通过指针得到Class类型(这个是类的类)的handlerType,handlerType通过getMethod动态载入setContentView,setContentView大家都非常熟悉就是Android里面的载入布局的函数,然后得到一个Method进行反射机制,实现函数载入。

setContentViewMethod.invoke(handler, contentView.value());这句话也能够这么理解。那就是handler有setContentViewMethod这种方法,setContentViewMethod这种方法的參数是contentView.value()。

这样就明确了为什么这样

@ContentView(R.layout.main)

public class MyActivity extends FragmentActivity 就能够实现载入布局的操作了,其它的xUtils的注解操作也是类似的。

以下是一个简单流程图:

如有问题请留言,转载注明出处。

http://blog.csdn.net/rain_butterfly/article/details/37931031

时间: 2024-10-05 08:29:47

Android 最火框架XUtils之注解机制具体解释的相关文章

Android 最火的高速开发框架AndroidAnnotations使用具体解释

Android 最火的高速开发框架androidannotations配置具体解释文章中有eclipse配置步骤.Android 最火高速开发框架AndroidAnnotations简介文章中的简介.本篇注重解说AndroidAnnotations中注解方法的使用. @EActivity 演示样例: @EActivity(R.layout.main) public class MyActivity extends Activity { } @fragment 演示样例: @EFragment(R

Android 最火的快速开发框架XUtils之注解机制详解

在上一篇文章Android 最火的快速开发框架XUtils中简单介绍了xUtils的基本使用方法,这篇文章说一下xUtils里面的注解原理. 先来看一下xUtils里面demo的代码: @ViewInject(R.id.tabhost) private FragmentTabHost mTabHost; @ViewInject(R.id.big_img) private ImageView bigImage; 可能好多人一看就说这是个what,其实这是Java core里面的内容,做JavaEE

Android 最火开发框架 xUtils

xUtils简介 xUtils3 api变化较多, 已转至 https://github.com/wyouflf/xUtils3 xUtils 2.x对Android 6.0兼容不是很好, 请尽快升级至xUtils3. xUtils 包含了很多实用的android工具. xUtils 支持大文件上传,更全面的http请求协议支持(10种谓词),拥有更加灵活的ORM,更多的事件注解支持且不受混淆影响... xUitls 最低兼容android 2.2 (api level 8) 目前xUtils主

android最火框架集锦

    初学者最想想整理下市面上比较火爆的android开源框架,希望弄到的时候能够有所查,有所学,爱总结的程序员才是有前途的好猿....    1.xUtils. xUtils 包含了很多实用的android工具. xUtils 支持大文件上传,更全面的http请求协议支持(10种谓词),拥有更加灵活的ORM,更多的事件注解支持且不受混淆影响... xUitls 最低兼容android 2.2 (api level 8) 项目地址:https://github.com/wyouflf/xUti

Android 最火高速开发框架AndroidAnnotations简单介绍

在上一篇Android 最火的高速开发框架androidannotations配置具体解释中介绍了在eclipse中配置androidannotation的步骤,如需配置请參考. 1.目标 androidannotation框架要促进Android应用程序的编写和维护.相信简单的代码有明白的意图是实现这些目标的最佳途径. 当我们都沉浸在开发Android应用程序时,我们经常会想:为什么我们总是须要重复写同样的代码吗?为什么我们的应用越来越难维护呢? context和activity就像是神一样的

Android 最火的快速开发框架xUtils

Github下载地址:https://github.com/wyouflf/xUtils xUtils简介 xUtils 包含了很多实用的Android工具. xUtils 最初源于Afinal框架,进行了大量重构,使得xUtils支持大文件上传,更全面的http请求协议支持(10种谓词),拥有更加灵活的ORM,更多的事件注解支持且不受混淆影响. xUtils最低兼容Android 2.2 (API Level 8) 目前xUtils工具主要有四大模块: DbUtils模块 Android中的O

android 开源框架xUtils

首先查到的博客地址:  http://zxs19861202.iteye.com/blog/2003241 Github地址: https://github.com/wyouflf/xUtils xUtils简介 xUtils 包含了很多实用的android工具. xUtils 最初源于Afinal框架,进行了大量重构,使得xUtils支持大文件上传,更全面的http请求协议支持(10种谓词),拥有更加灵活的ORM,更多的事件注解支持且不受混淆影响... xUitls最低兼容android 2.

Android最近项目用到的框架xUtils

项目地址:https://github.com/wyouflf/xUtilsxUtils 简介 xUtils 包含了很多实用的android工具. xUtils 源于Afinal框架,对Afinal进行了大量重构,使得xUtils支持大文件上传,更全面的http请求协议支持,拥有更加灵活的ORM,更多的事件注解支持且不受混淆影响... xUitls最低兼容android 2.2 (api level 8) DbUtils模块: android中的orm框架,一行代码就可以进行增删改查: 支持事务

Android 最火的快速开发框架androidannotations配置详解

以前给大家介绍的xUtils是国内比较火的快速开发框架,但是它的注解机制不是太稳定而且注解可选也比较少,今天给大家介绍一个国外的一个框架主要专注于注解的开发,简化Android代码编写,因为配置注意事项较为复杂,所以先详细介绍一下配置: git官网:https://github.com/excilys/androidannotations 下载完解压目录如上,AndroidAnnotations是源码工程,example是例子工程, 打开\examples\HelloWorldEclipse,如