使用反射生成jdk动态代理

1 代理类实现了接口?执行代理类的每个方法都会被替换执行InvocationHandler对象的invoke方法
//obj是你自己实例化的对象
在invoke中调用 Object object = method.invoke(obj,args);其实还是你自己实现了接口
2 每个代理对象关联一个InvocationHandler
//接口
public interface Dog {
    void info();
    void run();
}
//实现接口的对象
public class GunDog implements Dog {
    @Override
    public void info() {
        Log.d("shj--","我是猎豹狗");
    }

    @Override
    public void run() {
        Log.d("shj--","我跑的很快");
    }
}
//handler
public class DogHandler implements InvocationHandler {
//被代理的对象,你自己实例化的对象
    private Object obj;

    public void setObj(Object obj) {
        this.obj = obj;
    }
//每次调用代理方法触发这个函数
    @Override
    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
    //前置操作,AOP
        DogUtils.method1();

        //这个方法调用你实现的对象的方法,代理调用的,即代理实现了接口,其实还是你自己实现的
        Object object = method.invoke(obj,args);
        DogUtils.method2();
          //后置操作,AOP
        return  object;
    }
}
//生成代理的工厂类
public class ProxyFactory {
    public static Object getProxy(Object obj){
        DogHandler handler = new DogHandler();
        handler.setObj(obj);
        return Proxy.newProxyInstance(obj.getClass().getClassLoader(),obj.getClass().getInterfaces(),handler);
    }
}


//AOP
public class DogUtils {
    public static void method1(){
        Log.d("shj--","我是method1");
    }
    public static void method2(){
        Log.d("shj--","我是method2");
    }
}


//测试类
public class DogActivity extends Activity {
    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
    //你自己实现接口的对象
        Dog dog = new GunDog();
    //将这个对象传进代理里,让代理去做处理
        Dog proxy = (Dog) ProxyFactory.getProxy(dog);
        //
        proxy.info();
        proxy.run();

    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值