动态代理实现AOP
AOP主要功能
日志记录 性能统计 安全监测 事务处理 异常处理等
主要意图
将日志记录 性能统计 安全控制 事务处理 异常处理等代码从业务
逻辑代码中划分出来,通过对这些行为的分离我们希望可以将他们独立
到非指导业务逻辑的方法中 进而改变这些行为的时候不影响业务逻辑代码
使用AOP思想实现权限验证跳转到登录界面
---常量类--
public class Contains {
public static boolean isLogin = false;
}
创建接口 ILogin.java
public interface ILogin {
void isLogin();
}
InvocationHandler实现类
public class MyHandler implements InvocationHandler {
private Context context ;
private Object target;
public MyHandler(Object context) {
this.context = (Context) context;
this.target = context ;
}
@Override
public Object invoke(Object proxy, Method method, Object[] args)throws Throwable {
Object invoke =null;
if ( Contains.isLogin) {
//实际执行的是MainActivity 里面的 islogin方法
invoke = method.invoke(target,args);
}else{
//跳转到登录界面
Intent intent = new Intent(context,LoginActivity.class);
context.startActivity(intent);
}
return invoke;
}
}
MainActivity核心代码
首先就是把需要做登录界面判断的界面实现 ILogin 接口
然后实例化
ILogin proxy;
oncreate 方法中初始化proxy对象
proxy = (ILogin) Proxy.newProxyInstance(MainActivity.this.getClassLoader(),new Class[]{ILogin.class},new MyHandler(this));
在需要做权限校验的地方调用
proxy.isLogin();
重写isLogin方法 把登录成功后的执行逻辑写在这个方法中就行了