3,在项目Gradle中添加 annotationProcessor project 引用
IRemoteDataSource, RemoteDataSourceImpl
- compile project(':apt-delegate-annotation')
- annotationProcessor project(':apt-delegate-compiler')
4,如不雅有自定义注解的话,创建一个java的Module,专门放入自定义注解。项目与apt Module都需引用自定义注解Module
4-1,主工程:
- compile project(':apt-delegate-annotation')
- annotationProcessor project(':apt-delegate-compiler')
- compile project(':apt-delegate-annotation')
- compile 'com.google.auto.service:auto-service:1.0-rc2'
- compile 'com.squareup:javapoet:1.4.0'
5,生成的源代码在build/generated/source/apt下可以看到
可贵
就apt本身来说没有任何可贵可言,可贵一在于设计模式和解耦思惟的灵活应用,二在与代码生成的繁琐,你可以手动字符串拼接,当然有更高等的弄法用squareup的javapoet,用建造者的模式构建出任何你想要的源代码
长处
它的强大年夜之处无需多言,看代表框架的源码,你可以学到很多新姿势。总的一句话:它可以做任何你不想做的复杂的工作,它可以帮你写任何你不想反复代码。懒人福利,老司机必备神技,可以进步车速,让你以任何姿势漂移。它可以生成任何源代码供你在任何处所应用,就像剑客的剑,快疾如风,无所不及
4-2,apt Module:
我想稍微研究一下,APT还可以在哪些处所应用,比如:Repository层?
APT在Repository层的测验测验
每一次添加新房口都须要简单地修改很多处所,能不克不及把一部分代码主动生成,削减修改的次数呢?
Repository层
长途数据源,属于收集请求相干
懂得APT与简单进修之后,搭建Repository层时,发明有一些简单,反复模版的代码
ILocalDataSource, LocalDataSourceImpl
本地数据源,属于本地数据持久化相干
IRepository,RepositoryImpl
仓库代劳类,代劳长途数据源竽暌闺本地数据源
Repository层APT设计思路
发明在具体实现类中,大年夜多都是以代劳类的情势调用:办法中调用代劳对象,办法名称与参数,返回值类型都雷同。显然可以进行APT的测验测验
- 简单的情况,具体实现类中只有一个代劳对象
- 复杂的情况,有多个代劳对象,办法内并有一些变更
期望结不雅:
- 把RemoteDataSourceImpl主动化生成
- 把LocalDataSourceImpl主动化生成
- 把RepositoryImpl主动化生成
要想具体实现类主动生成,起重要知道须要什么:
- 便利主动生成java文件的类库
- 主动生成类名字是什么
- 须要注入的代劳对象
- 让代劳对象代劳的办法集
主动生成java文件的类库,可以应用 squareup javapoet
主动生成类名字,代劳对象,办法集须要经由过程自定义注解设备参数的形成,在AbstractProcessor中获取
Delegate
Android APT
- @Retention(RetentionPolicy.SOURCE)
- @Target(ElementType.TYPE)
- public @interface Delegate {
- /**
- * delegate class package
- */
- String delegatePackage();
- /**
- * delegate class
推荐阅读
沙龙晃荡 | 去哪儿、陌陌、ThoughtWorks在主动化运维中的实践!10.28不见不散!大年夜多半公共云都可以应用机械进修,这些供给了企业须要的人工智能的才能。就像深度进修一样,云计算让人工智能从新焕发>>>详细阅读
地址:http://www.17bianji.com/lsqh/37959.html
1/2 1