使用AspectJ注解进行非侵入式扩展的Android实例

  面向Aspect的软件开发的好处网上一搜一大把,本文旨在以在Android中使用注解来完成Aspect的非侵入式编程,需要AOP和AspectJ相关以及ButterKnife注入知识背景,如果阅读困难请放弃或自行恶补.

  我们要完成任务 1.MainActivity类调用setContentView()后,调用ButterKnife.bind(Context)方法 2.MainActivity.onDestroy()执行前或者后,unbind之前ButterKnife.bind()返回的句柄.

  侵入式的修改是什么样的呢?MainActivity这个类必须有修改,比如,最直接的方法就是打开MainActivity,添加一个成员变量,在setContentView最后加上ButterKnife.bind(this)返回句柄保存到新加的变量,然后重写onDestroy(),调用句柄的unbind().其它改进方式有很多,但是只要MainActivity所在原来文件需要变化哪怕一个字符,统统都算是侵入式修改.

  非侵入式修改会是什么样的呢?可以另加一个文件或者一堆文件,啪啦啪啦地写代码,然后编译运行,完成.面向Aspect的开发就是干这类事的.这个Aspect源自Java和.net,Java开发框架Spring就尝试内嵌AspectJ使用AOP来设计其组件协作.那么在Android里,能不能用AspectJ来完成上述需要呢.

先上两篇文章

Spring AOP之Introduction(@DeclareParents)简介

循序渐进之Spring AOP(6) - 使用@Aspect注解

使用AspectJ注解@DeclareMixin(取代将来会废弃的@DeclareParents)给MainActivity引入新的成员变量或函数,用joinpoint/pointcut技术在MainActivity代码运行前后注入扩展的代码.参考书<Manning.-.AspectJ in Action 2nd Edition>和<Aspect.Oriented.Software.Development.with.Use.Cases.Ivar Jackson>

你可能感兴趣的:(使用AspectJ注解进行非侵入式扩展的Android实例)