自定义注解是Android进阶的必学知识,从现在起我讲为大家带来四篇文章,让大家彻底学会自定义注解
静态代理大家都明白,就是相当于包装了一次,在包装这一次的时候可以加一些业务逻辑。同样静态代理的特点是一个接口对应一个代理类,当然委托类可以多个。
静态代理
/**
* 定义Demo接口
*/
public interface Demo {
public void save();
}
/**
* DemoImpl实现Demo接口并覆写save()方法
* 真实主题,执行具体业务
*/
public class DemoImpl implements Demo {
public void save() {
System.out.println("调用save()方法");
}
}
/**
* DemoImplProxy 也实现了Demo接口,并覆写了save()方法,增加了自己的业务
* 代理主题,负责其他业务的处理
*/
public class DemoImplProxy implements Demo {
Demo demoImpl = new DemoImpl();
public void save() {
System.out.println("开始记录日志");
demoImpl.save();
System.out.println("开始结束日志");
}
}
静态代理的特点就是:一个萝卜一个坑,但是这样会产生大量的代理类
动态代理
动态代理的特点
动态代理是指在运行时动态生成代理类。即,代理类的字节码将在运行时生成并载入当前代理的 ClassLoader。
与静态处理类相比,动态类有诸多好处。
- 首先,不需要为真实主题写一个形式上完全一样的封装类,假如主题接口中的方法很多,为每一个接口写一个代理方法也很麻烦。如果接口有变动,则真实主题和代理类都要修改,不利于系统维护;
- 其次,使用一些动态代理的生成方法甚至可以在运行时制定代理类的执行逻辑,从而大大提升系统的灵活性。
实现步骤
- 新建代理类和委托类共同的接口以及委托类
- 实现InvocationHandler接口,这是负责连接代理类和委托类的中间类必须实现的接口
- 通过Proxy类新建代理类对象第一步新建代理类和委托类共同的接口以及委托类
public interface IOperate