概述
AspectJX不会配置的话可前往
CSDNhttps://mp.csdn.net/mp_blog/creation/editor/120344428
1.登录AOP注解
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface IsLogin {
String value();
}
切入点处理
@Aspect
public class BehaviorTraceAspect {
@Pointcut("execution(@com.example.administrator.aoptest.annotation.IsLogin * *(..))")
public void methodAnnottatedWithBehaviorTrace() {
}
@Around("methodAnnottatedWithBehaviorTrace()")
public Object weaveJoinPoint(ProceedingJoinPoint joinPoint) throws Throwable {
Context context= (Context) joinPoint.getThis();
if (SettingsPerf.getLonginStatus(context)){//判断是否登录,登录成功执行MainAcitity onClick 中的跳转
Object result = joinPoint.proceed(); //执行注解的方法
return result;
}else {//没有登录,不去执行注解的方法
Intent intent=new Intent(context,LoginActivity.class);
context.startActivity(intent);
return null;
}
}
}
@Pointcut 是切入 点 , 所谓切入点是指我们要对哪些 Joinpoint 进行拦截的定义
execution(@com.example.administrator.aoptest.annotation.IsLogin * *(..))"
表示com.example.administrator.aoptest.annotation 包下所有注解了 IsLogin 的类的方法,进行拦截。
@Around 环绕通知, 在目标执行中执行通知, 控制目标执行时机 ,相对应的还有@Before,@After
使用注解
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
@IsLogin("登录")
public void onClick(View view) {
Intent intent=new Intent(this,UserCenterActivity.class);
startActivity(intent);
}
}
2.防重点击AOP
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface SingleClick {
/**
* 快速点击的间隔
*/
long value() default 1000;
}
切入点处理
@Aspect
public class SingleClickAspect {
/**
* 最近一次点击的时间
*/
private long mLastTime;
/**
* 最近一次点击的控件ID
*/
private int mLastId;
/**
* 方法切入点(改变成自己的包名)
*/
@Pointcut("execution(@com.hjq.demo.aop.SingleClick * *(..))")
public void method() {}
/**
* 在连接点进行方法替换
*/
@Around("method() && @annotation(singleClick)")
public void aroundJoinPoint(ProceedingJoinPoint joinPoint, SingleClick singleClick) throws Throwable {
View view = null;
for (Object arg : joinPoint.getArgs()) {
if (arg instanceof View) {
view = (View) arg;
}
}
if (view != null) {
long currentTime = Calendar.getInstance().getTimeInMillis();
if (currentTime - mLastTime < singleClick.value() && view.getId()
== mLastId) {
Log.i("SingleClick", "发生快速点击");
return;
}
mLastTime = currentTime;
mLastId = view.getId();
//执行原方法
joinPoint.proceed();
}
}
}
用法
@SingleClick
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.iv_crash_info:
mDrawerLayout.openDrawer(GravityCompat.START);
break;
}
}
最后
以上就是可耐戒指为你收集整理的android AOP面向切面AspectJX框架配合使用的全部内容,希望文章能够帮你解决android AOP面向切面AspectJX框架配合使用所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复