jdk-动态代理

动态代理-jdk

基于JDK的动态代理要求被代理类必须实现一个公共接口

1、公共接口

public interface Subject {
    void hello(String param);
}

2、被代理类

public class SubjectImpl implements Subject {
    public void hello(String param) {
        System.out.println("hello " + param);
    }
}

3、代理类

public class SubjectProxy implements InvocationHandler {

    //持有一个被代理类的实例, 类型为公共接口类型
    private Subject subject;

    public SubjectProxy(Subject subject){
        this.subject = subject;
    }

    //代理逻辑
    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
        //目标方法执行前
        System.out.println("-----begin-----");
        
        Object invoke = method.invoke(subject, args);
        
        //目标方法执行后
        System.out.println("-----end-----");
        return invoke;
    }
}

4、执行代理

//创建被代理类实例
Subject subject = new SubjectImpl();

//创建代理增强实例
SubjectProxy subjectProxy = new SubjectProxy(subject);

//生成真正的代理对象
/*Proxy.newProxyInstance 方法的参数为
    1、被代理类的类加载器
    2、被代理类实现的接口数组
    3、创建的代理增强实例
*/
Subject proxyInstance = (Subject)Proxy.newProxyInstance(subject.getClass().getClassLoader(), subject.getClass().getInterfaces(), subjectProxy);

//执行代理对象的方法,则会自动执行增强逻辑
proxyInstance.hello("Timi");
posted @   谭五月  阅读(109)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 25岁的心里话
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示