butterknife源码分析系列:
谈一谈Java的注解
http://blog.youkuaiyun.com/u012933743/article/details/54909590
如何处理注解—反射与注解处理器
http://blog.youkuaiyun.com/u012933743/article/details/54972050
代码分析
http://blog.youkuaiyun.com/u012933743/article/details/64437988
我们都听过或者用过butterknife,知道butterknife是一款View注入的框架。如果让你从框架源码的角度去学习它,你会怎么做?
如果是我,我会先在项目中使用butterknife,知道它的使用方法。这样我就知道了butterknife通过注解来实现View的注入,紧接着去学习注解的定义、如何自定义注解。然后我们就有一个疑问:butterknife是如何处理这些注解的,是如何通过注解来简化代码的?带着这个疑问,我们学习到了反射、注解处理器。有了这些基础,我们就可以结合butterknife代码去分析原理。
你们可以看到这种学习方法是循序渐进的,水到而渠成。
定义
说起注解,大家都很熟悉。不管是Java语言本身自带的@Override、@Override,还是热门的第三方框架butterknife的@BindView、retrofit的@Get等、还是SSH开发的@Autowired。
注解我们经常用到,但是我们是否对注解的定义清晰呢?在Wiki上如此定义道:
an annotation is a form of syntactic metadata that can be added to Java source code
即注解的引入,是向Java代码中引入metadata。那什么是metadata呢?
metadata译为元数据,可以理解为数据的数据,即用来描述其他数据的数据。举些栗子,书的作者、文件的大小、图片的颜色,这些都可以理解为元数据。因此Java语言中的metadata就是为了描述代码而使用的元数据。类、方法、变量、包都可以被注解。
注解的形式为@xxxx,Javadoc和注解都会出现这样的形式。
注解:
&