静态代理和动态代理

代理:

        即代购;比如:自己去商店购买某个产品,或者找其他人代为购买,以达到自我目的;静态代理:

java中的代理模式:

    指代码不直接访问⽬标对象,⽽是通过⼀个代理对象来访问⽬标对象,代理对象充当⼀个中介作⽤。

静态代理:

        在jvm运⾏之前就已经获取到代理类的class信息.
        特点:
             代理角色和真实角色都需要实现同一个接口
             真实角色专注于自己的事情;
             代理角色目的就是帮助真实角色完成一件事情

public class Demo {
    public static void main(String[] args) {
        Mary imMary = new ImMary();
        ImMary1 imMary1 = new ImMary1(imMary);
        imMary1.mary();

    }
}
interface Mary{
    void mary();
}
//目标类:
class ImMary implements Mary{

    @Override
    public void mary() {
        System.out.println("我要结婚了,我好高兴!");
    }
}
//代理类:
class ImMary1 implements Mary{
    private Mary mary;
    //有参构造
    public ImMary1(Mary mary) {
        this.mary = mary;
    }

    @Override
    public void mary() {
        System.out.println("结婚之前布置现场");
        mary.mary();
        System.out.println("婚礼结束,付尾款");
    }
}

动态代理:

        在java程序运⾏过程(程序已经启动在运⾏了)由jvm⽣成代理类的class信息,该class信息⽣成后是直接处于内存中的,并没有写⼊磁盘保存起来;然后通过反射⽅式实例化代理类对象,因为代理类的class信息已经存在于内存中,所以可以通过反射⽅式实例化。
        特点:
           

public class Demo {
    public static void main(String[] args) {
        ImMary imMary = new ImMary();
        MyInvocation myInvocation = new MyInvocation(imMary);
        Object o = Proxy.newProxyInstance(
                imMary.getClass().getClassLoader(),
                imMary.getClass().getInterfaces(),
                myInvocation
        );
        imMary.mary();
    }
}
//接口:
public interface Mary {
    void mary();
}
//目标类:
public class ImMary implements Mary {

    @Override
    public void mary() {
        System.out.println("我要结婚了,我好高兴");
    }
}
//实现InvocationHandler接口的子类:
public class MyInvocation implements InvocationHandler {
    private Object a;

    public MyInvocation(Object a) {
        this.a = a;
    }

    @Override
    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
        System.out.println("婚前准备");
        Object invoke = method.invoke(a, args);
        System.out.println("婚后支付尾款");
        return invoke;
    }
}

 基于接口实现的

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值