IOC框架

IOC(Inversion Of Control)框架,已经是比较成熟,比较老的技术了。市面上也有许多成熟的产品,比如butterKnife,ButterKnife,RoboGuice...如果我们的项目对这块依赖不是很大,我们可以尝试自己写一个IOC框架。当然其实说白了就是一个反射框架,所以我们首先来讲讲注解,然后通过注解反射。

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

以上就是一个简单的注解例子,通常用@interface来标记注解标记

public enum ElementType {  
    /** 
     * Class, interface or enum declaration. 
     */  
    TYPE,  
    /** 
     * Field declaration. 
     */  
    FIELD,  
    /** 
     * Method declaration. 
     */  
    METHOD,  
    /** 
     * Parameter declaration. 
     */  
    PARAMETER,  
    /** 
     * Constructor declaration. 
     */  
    CONSTRUCTOR,  
    /** 
     * Local variable declaration. 
     */  
    LOCAL_VARIABLE,  
    /** 
     * Annotation type declaration. 
     */  
    ANNOTATION_TYPE,  
    /** 
     * Package declaration. 
     */  
    PACKAGE  
}  

关于上述Target参数的解释

public enum RetentionPolicy {  
    /** 
     * Annotation is only available in the source code. 
     */  
    SOURCE,  
    /** 
     * Annotation is available in the source code and in the class file, but not 
     * at runtime. This is the default policy. 
     */  
    CLASS,  
    /** 
     * Annotation is available in the source code, the class file and is 
     * available at runtime. 
     */  
    RUNTIME  
}  

Retention参数解释
知道了这些我们已经可以编写一个简单的IOC框架了

注解解析代码
  1. 首先我们需要在activity注入布局文件后进行解析,否则是找不到这些id的
  2. 然后我们根据反射方法获取该activity下所有字段
Field[] fields = activity.getClass().getDeclaredFields();
  1. 然后遍历这些字段是否带了我们定义的注解
  2. 若带了该注解,则获取其值
  3. 根据该值我们调用activity的findViewById(id)方法绑定View
  4. 然后再查询有无click方法,若有继续调用Method.invoke方法
    附上代码github ioc框架

下回我们不用反射,用预编译来生成IOC框架,速度上会有较大提升,目前比较流行的Dagger2就是用的预编译技术

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 作为一名Android程序员,对于上面这种机械化的代码你一定写到想吐了,或许多数时候你只是copy ,paste,...
    尹star阅读 28,709评论 13 78
  • 一、IOC简单科普 所谓IOC,即控制反转(Inversion of Control,英文缩写为IoC) 假如你的...
    小鱼爱记录阅读 6,428评论 2 12
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 176,041评论 25 709
  • 坚持了一个星期的运动后,从之前的累得腰酸背痛,累得直不起腿和腰,且根本就不想说话时,洗完澡时就想着马上沉沉睡去...
    anne007阅读 1,742评论 0 0
  • 刚看完西西里‘的美丽传说,好看。 女主的美貌和身材真的没得说。 男人的色欲和女人的嫉妒,让一个容貌和心灵至美的忠贞...
    西林胡阅读 2,394评论 0 0

友情链接更多精彩内容