Android AOP之路三 Android上的注解
一、简单介绍
啥是注解。不懂的能够先看我上一篇文章。
在android 里面 注解主要用来干这么几件事:
和编译器一起给你一些提示警告信息。
配合一些ide 能够更加方便快捷 安全有效的编写java代码。
谷歌出的support-annotations这个库 就是主要干这个的。
和反射一起 提供一些相似于spring 可配置的功能,方便简洁。
二、Support Annotations栗子
这里使用官方的一个库,说明在开发中的简单一个应用。
2.1 导包
在新建项目的时候会自己主动导的,能够看build.gradle中的依赖dependencies是这种。
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
exclude group: 'com.android.support', module: 'support-annotations'
})
compile 'com.android.support:appcompat-v7:25.1.1'
testCompile 'junit:junit:4.12'
}
假设没有的话,自己在build.gradle的依赖加入(xx.x.x为你的compileSdkVersion版本):
compile 'com.android.support:support-annotations:xx.x.x'
2.2 使用
这时候就能够使用一些support-annotations提供的注解,以下举一些栗子:
1、 @NonNull
test方法參数加入了一个NonNull注解,然后我们传递一个空的參数过去。
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
String s = null;
test(s);
}
public void test(@NonNull String s){
System.out.println(s);
}
}
IDE就会提示警告
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbml1Yml0aWFucGluZw==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="这里写图片描写叙述" title="">
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(s);
}
}
IDE就会提示
三、实现自己的ButterKnife
经过之前的知识,我们已经知道注解的原理和使用了,这里实现ButterKnife的一个简单功能,View的注入: 一个注解,一个解析器就可以。
3.1 BindView注解
@Target(ElementType.FIELD) //解析常量
@Retention(RetentionPolicy.RUNTIME) //执行时
public @interface BindView {
int value() default -1; //标识控件
}
3.2 BindViewParser解析器
/**
* Created by Litp on 2017/2/17.
*/
public class BindViewParser {
/**
* 传递activty或者View 对象,使用反射获取view变量
* @param object
*/
public static void inject(Object object) {
try {
parse(object);
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 解析获取值
* @param object
* @throws Exception
*/
public static void parse(Object object) throws Exception {
final Class<?
> clazz = object.getClass();
View view = null;
//获取clazz的变量。不论private还是public
Field[] fields = clazz.getDeclaredFields();
Android AOP之路三 Android上的注解的更多相关文章
- AOP方法拦截获取参数上的注解
https://www.jianshu.com/p/f5c7417a75f9 获取参数注解 在spring aop中,无论是前置通知的参数JoinPoint,还是环绕通知的参数ProceedingJo ...
- Android核心服务解析篇(三)——Android系统的启动
从大的方面来说.Android系统的启动能够分为两个部分:第一部分是Linux核心的启动,第二部分是Android系统的启动. 第一部分主要包含系统引导,核心和驱动程序等,因为它们不属于本篇要讲的内容 ...
- jQuery插件之路(三)——文件上传(支持拖拽上传)
好了,这次咱一改往日的作风,就不多说废话了,哈哈.先贴上源代码地址,点击获取.然后直接进入主题啦,当然,如果你觉得我有哪里写的不对或者欠妥的地方,欢迎留言指出.在附上一些代码之前,我们还是先来了解下, ...
- AOP切面编程在android上的应用
代码地址如下:http://www.demodashi.com/demo/12563.html 前言 切面编程一直是一个热点的话题,这篇文章讲讲一个第三方aop库在android上的应用.第三方AOP ...
- GitHub上不错的Android开源项目(三)
收集相关系列资料,自己用作参考,练习和实践.小伙伴们,总有一天,你也能写出 Niubility 的 Android App :-) GitHub上不错的Android开源项目(一):http://ww ...
- Android学习之路——简易版微信为例(三)
最近好久没有更新博文,一则是因为公司最近比较忙,另外自己在Android学习过程和简易版微信的开发过程中碰到了一些绊脚石,所以最近一直在学习充电中.下面来列举一下自己所走过的弯路: (1)本来打算前端 ...
- Android ROM开发(三)——精简官方ROM并且内置ROOT权限,开启Romer之路
Android ROM开发(三)--精简官方ROM并且内置ROOT权限,开启Romer之路 相信ROM的相关信息大家通过前几篇的学习都是有所了解了,这里就不在一一提示了,这里我们下载一个官方包,我们还 ...
- GitHub上最火的74个Android开源项目(三)
此前,推出的GitHub平台上“最受欢迎的开源项目”系列文章引发了许多读者的热议,在“GitHub上最火的40个Android开源项目(一).(二)中,我们也相继盘点了40个GitHub上最受欢迎的A ...
- 【转】Pro Android学习笔记(三):了解Android资源(上)
在Android开发中,资源包括文件或者值,它们和执行应用捆绑,无需在源代码中写死,因此我们可以改变或替换他们,而无需对应用重新编译. 了解资源构成 参考阅读Android学习笔记(三八):资源res ...
随机推荐
- ROS中利用V-rep进行地图构建仿真
V-rep中显示激光扫描点 在VREP自带的场景中找到practicalPathPlanningDemo.ttt文件,删除场景中多余的物体只保留静态的地图.然后在Model browser→comp ...
- <c:url>标签相关知识点
<c:url>标签: value:指定路径!他会在路径前面自动添加项目名. <c:url value="/index.jsp"/>,他会输出/day14/i ...
- java第八节 GUI/图形用户界面
/* *第8讲 GUI/图形用户界面 * AWT的基础知识 * GUI全称是Graphical User Interface,即图形用户界面 * JDK中提供了AWT和Swing两个包,用于GUI程序 ...
- rabbitmq重装依赖的erlang 要注意
今天安装的erlang和rabbitmq版本不匹配导致出现各种问题,在使用正确版本安装后出现问题,在日志中找到报错信息: {"init terminating in do_boot" ...
- QQ模仿之弹窗ADDFriend事件
大家自己分析吧 #pragma once //演示QQ2009 #define WINDOW_WIDTH 250 //窗口宽度 #define WINDOW_HEIGHT 600 //窗口高度 str ...
- 获取可用的处理器(CPU)核数【转】
linux下获取cpu核数,sysconf(_SC_NPROCESSORS_CONF),,, from:红黑联盟,https://www.2cto.com/kf/201210/164480.html ...
- 重写Checkbox 改写选择框的大小
/* 作者:Starts_2000 * 日期:2009-07-30 * 网站:http://www.csharpwin.com CS 程序员之窗. * 你可以免费使用或修改以下代码,但请保留版权信息. ...
- session会话保持原理
1. 什么是会话保持? 会话保持是负载均衡最常见的问题之一,也是一个相对比较复杂的问题.会话保持有时候又叫做粘滞会话(Sticky Sessions).会话保持是指在负载均衡器上的一种机制,可以识别客 ...
- Nginx 和 PHP 的两种部署方式比较
2种部署方式简介 第一种 前置1台nginx服务器做HTTP反向代理和负载均衡 后面多态服务器部署Nginx Web服务和php-fpm提供的fast cgi服务 第二种 前置1台nginx服务器做W ...
- GIF Brewery for Mac(录制 Gif 动图工具)安装
1.软件简介 GIF Brewery 一款用于录制 Gif 动图等的工具. 2.资源列表 链接 提取密码 系统要求 软件语言 GIF Brewery for Mac v3.9.5 ltmf ma ...