手动实现ioc框架
10页1、手动实现IOC框架自序在开发Android中,总要写许多的findViewById方法,这无疑是一件非常痛苦的事情。直到接触了Xutils框架,发现竟然可以使用注解的方式,优雅的干掉了findViewById方法,当时真是惊为天人。后来遇到了Butterknife之后,发现不仅能够通过实现findViewById方法,甚至连setOnClickListener,getString(),getResource()方法,都能通过一行注解的方式快速的实现。当时在使用过程中,感觉这种方式大大的提高了开发的效率,以及编码的舒畅度,自己很有必要实现以下。于是便有了这篇博客,该篇博客主要实现了findViewById方法,虽然广度不是很大,但他们的原理都是相同的。如何使用使用方式和Butterknife相似,通过注解BindView标识控件,通过ViewFinder.inject(this)实现代码的注入。public class MainActivity extends AppCompatActivity / 通过注解绑定控件 BindView(R.id.text) TextView textVi
2、ew; Override protected void onCreate(Bundle savedInstanceState) super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); /代码注入 ViewFinder.inject(this); textView.setText(123); 实现原理实现方式有两种通过反射实现:如果对于反射有深入了解,则应该清楚,我们可以通过反射获取到该注解,并且获取到该注解的值等等一系列的必须量,通过反射我们实现对控件的注入。该方法虽然可以实现,但对效率有着一定的影响。毕竟反射很影响效率。通过编译器生成代码实现:在我们运行Java代码的时候,通常先通过javac将java文件编译成.class文件,然后运行class文件,那么我们能不能够在编译时期,根据我们的注解生成findViewById等方法,这样我们就能够在运行期查找控件。结果当然是可以的,本例就是使用这种方式。因为虽然其使用的是注解,但在运行期其实质仍是通过findViewById方法查找控件,相比
3、于反射来说,大大的提高了性能。通过编译器生成代码的大致流程如下:编写Modul:ioc-annotation,该工程主要定义注解BindView用以修饰变量。编写Modul:ioc-compiler,该工程为最终会打成jar包,主要是在javac编译时期根据注解生成注入代码的相关类编写Modul:ioc-api,该工程主要提供注入的调用方法ViewFidder.inject(),调用代码注入的方法。编写Modul:app,测试工程。代码实现根据上面的流程,开始实现框架编写ioc-annotation模块该模块比较简单,就是定义一个注解。如下:Retention(RetentionPolicy.CLASS)Target(ElementType.FIELD)public interface BindView int value();该注解主要有两个功能:在Activity中修饰变量,用以标识需要findViewById的相关控件。在ioc-compiler模块中,用以检索和获取需要findViewById的控件。编写ioc-compiler模块在之前我们提到过,该框架的原理是在编译时期根据
4、我们的要求生成注入的辅助代码,那么如何生成,以何种规则生成,肯定是由我们来定义的。javac命令中,可以在其编译的指定目录放入一个.jar文件,当然这个.jar文件有特殊的要求(后面再说),这样运行javac命令之前,javac会调用jar,通过这种特性订制一些我们想实现的功能。那么看一下该模块的关键类IocProcessorAutoService(Processor.class)public class IocProcessor extends AbstractProcessor / 文件相关的辅助类,生成JavaSouceCode private Filer mFileUtils; private Elements mElementUtils; / 日志相关 private Messager mMessager; private Types mTypeUtils; Override public synchronized void init(ProcessingEnvironment processingEnvironment) super.init(processingEnvir
《手动实现ioc框架》由会员小**分享,可在线阅读,更多相关《手动实现ioc框架》请在金锄头文库上搜索。
2020年高考真题——理科综合(全国卷Ⅲ)+Word版含答案
2021年绝味鸭脖策划书
2021年熟食店创业方案
2021年熟食店开店策划
2021年卤菜店创业计划书
2021年周黑鸭网络营销策划方案
东大21年1月考试《现代设计方法》考核作业
谈我国行政管理效率的现状及其改观对策(论文)
单证员考试-备考辅导-复习资料:无贸易背景信用证案分析.docx
土木工程毕业生答辩自述.docx
建筑学毕业后工作状态真实写照.doc
C#代码规范(湖南大学).doc
xx区食药监局2019年工作总结及2020年工作计划
2019年中医院药物维持治疗门诊工人先锋号先进事迹
2019年度xx乡镇林长制工作总结
2019年性艾科工作计划书
2019年人才服务局全国扶贫日活动开展情况总结
关于组工信息选题的几点思考
摘了穷帽子 有了新模样
2019年某集团公司基层党支部书记培训班心得体会
2024-03-21 40页
2024-03-21 32页
2024-03-21 44页
2024-03-13 36页
2024-03-13 12页
2024-03-13 15页
2024-03-13 35页
2024-03-04 55页
2024-03-04 57页
2024-03-04 137页