面向Aspect的軟件開發(fā)的好處網上一搜一大把冈敛,本文旨在以在Android中使用注解來完成Aspect的非侵入式編程,需要AOP和AspectJ相關以及ButterKnife注入知識背景鸣皂,如果閱讀困難請放棄或自行惡補.
我們要完成任務∽デ础1.MainActivity類調用setContentView()后,調用ButterKnife.bind(Context)方法∧臁2.MainActivity.onDestroy()執(zhí)行前或者后癌压,unbind之前ButterKnife.bind()返回的句柄.
侵入式的修改是什么樣的呢?MainActivity這個類必須有修改荆陆,比如滩届,最直接的方法就是打開MainActivity,添加一個成員變量被啼,在setContentView最后加上ButterKnife.bind(this)返回句柄保存到新加的變量帜消,然后重寫onDestroy(),調用句柄的unbind().其它改進方式有很多趟据,但是只要MainActivity所在原來文件需要變化哪怕一個字符券犁,統(tǒng)統(tǒng)都算是侵入式修改.
非侵入式修改會是什么樣的呢?可以另加一個文件或者一堆文件汹碱,啪啦啪啦地寫代碼粘衬,然后編譯運行,完成.面向Aspect的開發(fā)就是干這類事的.這個Aspect源自Java和.net,Java開發(fā)框架Spring就嘗試內嵌AspectJ使用AOP來設計其組件協(xié)作.那么在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>