沙龙晃荡 | 去哪儿、陌陌、ThoughtWorks在主动化运维中的实践!10.28不见不散!
经由过程进修与应用square公司的开源项目javapoet,来实现仓库层动态生成代码
安卓AOP三剑客: APT, AspectJ, Javassist
自定义注解设计
APT(Annotation Processing Tool 的简称),可以在代码编译期解析注解,并且生成新的 Java 文件,削减手动的代码输入。如今有很多主流库都用上了 APT,比如 Dagger2, ButterKnife, EventBus3 等
代表框架:
- DataBinding
- Dagger2
- ButterKnife
- EventBus3
- DBFlow
- AndroidAnnotation
应用姿势
1,在android工程中,创建一个java的Module,写一个类持续AbstractProcessor
- @AutoService(Processor.class) // javax.annotation.processing.IProcessor
- @SupportedSourceVersion(SourceVersion.RELEASE_7) //java
- @SupportedAnnotationTypes({ // 标注注解处理器支撑的注解类型
- "com.annotation.SingleDelegate",
- "com.annotation.MultiDelegate"
- })
- public class AnnotationProcessor extends AbstractProcessor {
- public static final String PACKAGE = "com.poet.delegate";
- public static final String CLASS_DESC = "From poet compiler";
- public Filer filer; //文件相干的帮助类
- public Elements elements; //元素相干的帮助类
- public Messager messager; //日记相干的帮助类
- public Types types;
- @Override
- public boolean process(Set<? extends TypeElement> set, RoundEnvironment roundEnvironment) {
- filer = processingEnv.getFiler();
- elements = processingEnv.getElementUtils();
- messager = processingEnv.getMessager();
- types = processingEnv.getTypeUtils();
- new SingleDelegateProcessor().process(set, roundEnvironment, this);
- new MultiDelegateProcessor().process(set, roundEnvironment, this);
- return true;
- }
- }
2,在持续AbstractProcessor类中的process办法,处理我们自定义的注解,生成代码: