AutoRegister框架分析

本文介绍了AutoRegister框架,这是一个基于字节码插桩技术的通用注册框架。它通过配置扫描和注册规则,实现了自动收集和注册子类及实现类。文章详细阐述了配置方式、扫描规则以及注册管理,同时还探讨了框架如何在APP启动时完成对象注册。此外,文中还提及了Android进阶学习资源,涵盖Java基础、设计思想、性能优化、框架解析等多个方面。
摘要由CSDN通过智能技术生成

AutoRegister 是一个使用字节码插桩技术实现的通用注册的框架,这个框架对使用场景有一些约定。

AutoRegister.png

使用配置

AutoRegister项目app模块中配置代码如下:

apply plugin: 'auto-register'
project.ext.registerInfoList = [
    [
        'scanInterface'             : 'com.billy.app_lib_interface.ICategory'
        // scanSuperClasses 会自动被加入到exclude中,下面的exclude只作为演示,其实可以不用手动添加
        , 'scanSuperClasses'        : ['com.billy.android.autoregister.demo.BaseCategory']
        , 'codeInsertToClassName'   : 'com.billy.app_lib_interface.CategoryManager'
        //未指定codeInsertToMethodName,默认插入到static块中,故此处register必须为static方法
        , 'registerMethodName'      : 'register' //
        , 'exclude'                 : [
            //排除的类,支持正则表达式(包分隔符需要用/表示,不能用.)
            'com.billy.android.autoregister.demo.BaseCategory'.replaceAll('\.', '/') //排除这个基类
        ]
    ],
    [
        'scanInterface'             : 'com.billy.app_lib.IOther'
        , 'codeInsertToClassName'   : 'com.billy.app_lib.OtherManager'
        , 'codeInsertToMethodName'  : 'init' //非static方法
        , 'registerMethodName'      : 'registerOther' //非static方法
    ]
]

autoregister {
    registerInfo = registerInfoList
    cacheEnabled = true
} 
配置说明

上面配置代码中,AutoRegister通过autoregister闭包结构,映射参数配置。registerInfoList是一个配置列表,每个配置项都有固定的结构,插件通过结构中指定的参数,下面是配置数据在插件中对应的解析代码,可以看到_八个_配置:

void convertConfig() {
    registerInfo.each { map ->
        RegisterInfo info = new RegisterInfo()
        info.interfaceName = map.get('scanInterface')
        def superClasses = map.get('scanSuperClasses')
        if (!superClasses) {
            superClasses = new ArrayList<String>()
        } else if (superClasses instanceof String) {
            ArrayList<String>
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值