㈠ 什麼是aop
AOP為Aspect Oriented Programming的縮寫,是面向切面編程,通過預編譯方式和運行期動態代理實現程序功能的統一維護的一種技術。AOP是OOP的延續,是軟體開發中的一個熱點,也是Spring框架中的一個重要內容,是函數式編程的一種衍生范型。
AOP的出現彌補了OOP的這點不足,AOP 是一個概念,一個規范,本身並沒有設定具體語言的實現,AOP是基於動態代理模式。AOP是方法級別的,要測試的方法不能為static修飾,因為介面中不能存在靜態方法,編譯就會報錯。
AOP可以分離業務代碼和關注點代碼(重復代碼),在執行業務代碼時,動態的注入關注點代碼。切面就是關注點代碼形成的類。Spring AOP中的動態代理主要有兩種方式,JDK動態代理和CGLIB動態代理。JDK動態代理通過反射來接收被代理的類,並且要求被代理的類必須實現一個介面。
(1)aop編程android擴展閱讀
AOP實現的關鍵在於AOP框架自動創建的AOP代理,AOP代理主要分為靜態代理和動態代理,靜態代理的代表為AspectJ。而動態代理則以Spring AOP為代表,靜態代理是編譯期實現,動態代理是運行期實現,可想而知前者擁有更好的性能。
靜態代理是編譯階段生成AOP代理類,也就是說生成的位元組碼就織入了增強後的AOP對象;動態代理則不會修改位元組碼,而是在內存中臨時生成一個AOP對象,這個AOP對象包含了目標對象的全部方法,並且在特定的切點做了增強處理,並回調原對象的方法。
㈡ Android中 使用AOP避免重復點擊事件
```javascript
```
``` javascript
//上次點擊的時間
private static Long sLastclick =0L;
//攔截所有兩次點擊時間間隔小於一秒的點擊事件
private static final Long FILTER_TIMEM =1000L;
//上次點擊事件View
private View lastView;
//---- add content -----
//是否過濾點擊 默兄掘昌認是
private boolean checkClick =true;
//---- add content -----
@Around("execution(* android.view.View.OnClickListener.onClick(..))")
public void onClickLitener(ProceedingJoinPoint proceedingJoinPoint)throws Throwable {
//大於指定時間
if (System.currentTimeMillis() -sLastclick >羨扒=FILTER_TIMEM) {
doClick(proceedingJoinPoint);
}else {
//---- update content ----- 判斷是否需要過濾點擊
//小於指定秒數 但是不是同一個view 可以點擊 或者不過濾點擊
if (!checkClick ||lastView ==null ||lastView != (proceedingJoinPoint).getArgs()[0]) {
//---- update content ----- 判斷是否需要過濾點擊
doClick(proceedingJoinPoint);
}else {
//大於指定秒數 且是同一個view
LogUtils.e(TAG,"重復點擊,已過濾");
}
}
}
//執行原有的 onClick 方法
private void doClick(ProceedingJoinPoint joinPoint)throws Throwable {
//判斷 view 是否存在
if (joinPoint.getArgs().length ==0) {
joinPoint.proceed();
return;
}
//記錄點擊的view
lastView = (View) (joinPoint).getArgs()[0];
//---- add content -----
//修改默認過濾點擊
checkClick =true;
//---- add content -----
//記錄點擊散粗事件
sLastclick =System.currentTimeMillis();
//執行點擊事件
try {
joinPoint.proceed();
}catch (Throwable throwable) {
throwable.printStackTrace();
}
}
@Before("execution(@包名.RepeatClick * *(..))")
public void beforeEnableDoubleClcik(JoinPoint joinPoint)throws Throwable {
checkClick =false;
}
```