JDK动态代理

博客主要介绍了静态代理和动态代理,特别是JDK动态代理的实现方式。静态代理通过预定义的代理类来控制对目标对象的访问,而动态代理则在运行时动态创建目标对象的代理。JDK动态代理通过Proxy类的newProxyInstance方法生成代理对象,并需实现InvocationHandler接口,重写invoke方法来处理方法调用。
摘要由CSDN通过智能技术生成

目录

静态代理

代理的三要素

咱们简单实现一下

先实现一个接口(共同的行为):

定义一个目标角色类:

定义一个代理角色类

定义一个test类去实现:

静态代理的特点

动态代理

动态代理的两种实现方式

动态代理的特点

JDK动态代理

        newProxylnstance(返回代理对象)

    简单实现:      

定义一个测试类:

优势


在了解动态代理之前。我们先了解一下静态代理。

静态代理

        某一个对象提供了一个代理,代理角色固定,以控制对这个对象的访问,代理类和委托类有共同的父类接口,这样在任何使用委托类对象的地方都可以用代理对象替代。代理类负责请求的预处理,过滤,将请求分派给委托类处理,以及委托类执行完成请求后的后续处理。

        简单理解来说,你们是一对准备新婚的恋人,你们想把婚礼布置的更加美满一点,怎么布置你不需要管。交给婚庆公司去管理,婚庆公司给给你们安排婚礼前后的布置。

        这么理解来你就是目标角色,婚前公司就是代理角色,你们有一个共同的目标,那就是完美进行婚礼。

代理的三要素

1.有共同的行为(结婚) -定义接口

2.目标角色/真实角色(新人) -实现接口

3.代理角色(婚庆公司) -实现接口 增强用户行为

咱们简单实现一下

先实现一个接口(共同的行为):

package org.example.proxy;
/*
* 定义用户的行为
* */
public interface Marry {
    public void toMarry();


}


定义一个目标角色类:

package org.example.proxy;
/*
* 静态代理--目标角色
* 实现行为
* */
public class You implements Marry{
    @Override
    public void toMarry() {
        System.out.println("结婚");
    }
}

定义一个代理角色类

package org.example.proxy;
/*
* 静态代理  代理角色
* 1。实现行为
* 2.增强用户行为
* */
public class MarryCompay implements Marry{
//准备一个目标对象
    private Marry target;
//通过代参构造传递目标对象
    public MarryCompay(Marry target) {
        this.target = target;
    }

    @Override
    public void toMarry() {
            befor();
            target.toMarry();
            after();
    }
    //用户行为的增强
    private void after(){
        System.out.println("新婚快乐");
    }
    private void befor(){
        System.out.println("婚礼在布置");
    }
}

定义一个test类去实现:

package org.example.proxy;

public class test {
    public static void main(String[] args) {
        //目标对象
        You you=new You();
        //代理对象
        MarryCompay marryCompay=ne
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值