jdk动态代理

本文深入讲解了Java设计模式中的代理模式,介绍了代理模式的基本概念、实现步骤及代码示例。代理模式通过代理类为委托类预处理消息、过滤消息、转发消息及事后处理消息,增加了访问实际对象的间接性,以便于附加多种用途。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

代理模式是常用的java设计模式,他的特征是代理类与委托类有同样的接口,代理类主要负责为委托类预处理消息、过滤消息、把消息转发给委托类,以及事后处理消息等。代理类与委托类之间通常会存在关联关系,一个代理类的对象与一个委托类的对象关联,代理类的对象本身并不真正实现服务,而是通过调用委托类的对象的相关方法,来提供特定的服务。简单的说就是,我们在访问实际对象时,是通过代理对象来访问的,代理模式就是在访问实际对象时引入一定程度的间接性,因为这种间接性,可以附加多种用途。
在这里插入图片描述

实现步骤

1.书写接口
2.书写实现类(委托类)
3.书写代理类实现invocationHandler接口

直接上代码

接口:

/**
 * 版本信息: Copyright (c)2018
 * 公司信息: 浙江xx信息技术有限公司
 * 开发人员: xiaohuang email:331088675@qq.com
 * 创建日期: 2019/2/14 16:29
 * 修改历史:
 * 功能描述:
 * ———————————————————————————
 */
public interface Person {
    public void say();
    public void eat();
    public void makeMoney();
    public void work();
}

实现类

/**
 * 版本信息: Copyright (c)2018
 * 公司信息: 浙江xx信息技术有限公司
 * 开发人员: xiaohuang email:331088675@qq.com
 * 创建日期: 2019/2/14 16:30
 * 修改历史:
 * 功能描述:
 * ———————————————————————————
 */
public class Student implements Person {
    @Override
    public void say() {

    }

    @Override
    public void eat() {

    }

    @Override
    public void makeMoney() {

    }

    @Override
    public void work() {
        System.out.println("study================");
    }
}

代理类

/**
 * 版本信息: Copyright (c)2018
 * 公司信息: 浙江xx信息技术有限公司
 * 开发人员: xiaohuang email:331088675@qq.com
 * 创建日期: 2019/2/14 16:32
 * 修改历史:
 * 功能描述:
 * ———————————————————————————
 */
public class ProxyPerson implements InvocationHandler {
    Student student;
    public ProxyPerson(Student stu){
        this.student=stu;
    }
    @Override
    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
        System.out.println("方法执行前==============");
        method.invoke(student);
        System.out.println("方法执行后=====================");
        return null;
    }
}

测试

/**
 * 版本信息: Copyright (c)2018
 * 公司信息: 浙江xx信息技术有限公司
 * 开发人员: xiaohuang email:331088675@qq.com
 * 创建日期: 2019/2/14 16:37
 * 修改历史:
 * 功能描述:
 * ———————————————————————————
 */
public class ProxyTest {
    public static void main(String[] args) {
        Class[] interface=Student.class.getInterfaces();
        Object proxy = Proxy.newProxyInstance(Person.class.getClassLoader(), interface, new ProxyPerson(new Student()) {
        });
        Person pers=(Person) proxy;
        pers.work();
    }
}

============================================

待续。。。
下篇将描述原理

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值