动态代理工具包

本文介绍了Java中使用Proxy和InvocationHandler实现动态代理的过程,通过ProxyInvocationHandler类展示了如何创建并调用代理对象的方法。在测试类Client中,展示了如何为真实对象Service创建代理,并在调用delete方法时进行额外的日志记录操作。动态代理在软件设计中常用于AOP(面向切面编程),如日志、事务管理等场景。
摘要由CSDN通过智能技术生成
package com.ProxyUtil;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;

public class ProxyInvocationHandler implements InvocationHandler {

    //被代理的接口
    private  Object target;

    public void setTarget(Object target) {
        this.target = target;
    }


    /**
     * this.getClass().getClassLoader() 得到类路径
     *  target.getClass().getInterfaces() 得到target的接口
     * @return 得到代理类
     */
    public Object getProxy(){
        return Proxy.newProxyInstance(this.getClass().getClassLoader(),
                target.getClass().getInterfaces(),this);

    }
    //返回代理类的方法
    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
       log(method.getName());
        Object invoke = method.invoke(target, args);
        return invoke;

    }
    public void log(String msg){
        System.out.println("执行了"+msg+"方法");
    }
}


测试

package com.ProxyUtil;

import com.ll.Service;
import com.ll.ServiceImpl;

public class Client {

    public static void main(String[] args) {
        //创建真实对象
        ServiceImpl service = new ServiceImpl();
        host host = new host();
        //得到代理类
        ProxyInvocationHandler proxyInvocationHandler = new ProxyInvocationHandler();
        proxyInvocationHandler.setTarget(service);
        Service proxy = (Service) proxyInvocationHandler.getProxy();
        proxy.delete();
    }
}

这里我们要区分真实角色和抽象角色的区别
抽象角色更像是一件事 拿租房举例子 租房这个动作就属于抽象角色 要写成接口的形式
然后我们租房的人和房东就是一个真实角色 需要去实现这个接口
在这里插入图片描述
因为我们创建了房东host 的对象 所以就执行了房东的rent方法

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值