如何在Android中使用AOP注解

  介绍

今天就跟大家聊聊有关如何在Android中使用AOP注解,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。

<强>一、简介

在安卓里面注解主要用来干这么几件事:

<李>

和编译器一起给你一些提示警告信息。

<李>

配合一些ide可以更加方便快捷安全有效的编写Java代码。谷歌出的support-annotations这个库就是主要干这个的。

<李>

和反射一起提供一些类似于弹簧可配置的功能,方便简洁。

<强>二,支持注释栗子

这里使用官方的一个库,说明在开发中的简单一个应用。

2.1导包

在新建项目的时候会自动导的,可以看。gradle中的依赖依赖性是这样的。

dependencies  {   ,compile  fileTree (dir: & # 39;填词# 39;,,包括:,(& # 39;* . jar # 39;])   ,androidTestCompile (& # 39; com.android.support.test.espresso: espresso-core: 2.2.2 # 39;,, {   ,,exclude 组:& # 39;com.android.support& # 39;,,模块:,& # 39;support-annotations& # 39;   ,})   ,compile  & # 39; com.android.support: appcompat-v7:25.1.1& # 39;   ,testCompile  & # 39; junit: junit: 4.12 & # 39;   }

如果没有的话,自己在build.gradle的依赖添加(xx.x.x为你的compileSdkVersion版本号):

compile  & # 39; com.android.support: support-annotations: xx.x.x& # 39;

2.2使用

这时候就可以使用一些support-annotations提供的注,解下面举一些栗子:

1, @NonNull

测试方法参数添加了一个null注解,然后我们传递一个空的参数过去。

public  class  MainActivity  extends  AppCompatActivity  {      ,@Override   ,protected  void  onCreate (Bundle  savedInstanceState), {   super.onCreate才能(savedInstanceState);   ,,setContentView (R.layout.activity_main);      String 才能;s =,空;   测试才能(年代);   ,}      ,public  void 测试(@NonNull  String  s) {   System.out.println才能(年代);   ,}      }

IDE就会提示警告

如何在Android中使用AOP注解

2, @StringRes

再定义testString方法参数添加了一个StringRes注解,然后我们传递一个数字过去。

public  class  MainActivity  extends  AppCompatActivity  {      ,@Override   ,protected  void  onCreate (Bundle  savedInstanceState), {   super.onCreate才能(savedInstanceState);   ,,setContentView (R.layout.activity_main);      testString才能(112312);   testString才能(R.string.app_name);   ,}      ,public  void  testString (@StringRes  int  s) {   System.out.println才能(年代);   ,}      }

IDE就会提示

如何在Android中使用AOP注解

<强>三,实现自己的ButterKnife

经过之前的知识,我们已经知道注解的原理和使用了,这里实现ButterKnife的一个简单功能,视图的注入:一个注解,一个解析器即可。

3.1 BindView注解

@Target (ElementType.FIELD),//解析常量   @Retention (RetentionPolicy.RUNTIME),//运行时   public  @interface  BindView  {   int 才能;价值(),default  1;,//标识控件   }

3.2 BindViewParser解析器

/* *   ,* Created  by  Litp 提醒2017/2/17。   ,*/public  class  BindViewParser  {/* *   *,才能传递den或者View 对象,使用反射获取视图变量   *,才能@param 对象   ,*/,public  static  void 注入(Object 对象),{      try {才能   ,才能解析(对象);   ,,},catch  (Exception  e), {   ,,e.printStackTrace ();   ,,}   ,}/* *   *,才能解析获取值   *,才能@param 对象   *,才能@throws 例外   ,*/,public  static  void 解析(Object 对象),throws  Exception  {      final 才能;Class< ?祝辞,clazz =, object.getClass ();      View 才能;View =,空;//才能获取clazz的变量,不论私人还是公开的   场[],才能fields =, clazz.getDeclaredFields ();      for 才能;(Field  Field :字段),{      ,,//这个变量,是否有BindView注解   ,,if  (field.isAnnotationPresent (BindView.class)), {   ,,,//获取这个变量对应的注解   ,,,BindView  injectView =, field.getAnnotation (BindView.class);   ,,,//获取值   ,,,int  id =, injectView.value ();   ,,,if  (id  & lt;=, 0), {   ,,,,throw  new 例外(“视图的id不能为空“);   ,,,},{else    ,,,,//设置可以访问   ,,,,field.setAccessible(真正的);   ,,,,//获取视图   ,,,,if  (object  instanceof 视图),{   ,,,,,view =,((视图),对象).findViewById (id);   ,,,,},else  if  (object  instanceof 活动),{   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null

如何在Android中使用AOP注解