ProxyBean的实现

如何将服务类和拦截方法置入对应的流程是ProxyBean要实现的功能。首先要理解动态代理模式。其实代理很简单,例如当你需要采访一名儿童时,首先需要经过他父母的同意,在一些问题上父母也许替他回答,而对于另一些问题,也许父母觉得不太合适,这个小孩会拒绝掉,显然这是父母就是证明儿童的代理(proxy)了。通过代理可以增强或者控制对儿童这个真实对象(target)的访问。
在JDK中提供了类proxy的静态方法——newProxyInstance

public static Object newProxyInstance(ClassLoader classLoader, Class<?>[] interfaces, InvocationHandler invocationHandker) throw IllegalArgumentException
  • classLoader——类加载器
  • interfaces——绑定的接口,也就是把代理对象绑定到哪些接口下,可以是多个
  • invocationHandler——绑定代理对象逻辑实现
    这里的invocationHandler是一个接口InvocationHandler对象,它定义了一个invoke方法,这个方法就是实现代理对象的逻辑的。
package com.springboot.chapter4.proxy;
import com.springboot.chapter4.intercept.Interceptor;import com.springboot.chapter4.invoke.Invocation;import java.lang.reflect.InvocationHandler;import java.lang.reflect.Method;import java.lang.reflect.Proxy;/** * @author nmj * @create 2021-11-20 10:17 */public class ProxyBean implements InvocationHandler {    private Object target = null;    private Interceptor interceptor = null;    /**     * 绑定代理对象     * @param target 被代理对象     * @param interceptor 拦截器     * @return 代理对象     */    public static Object getProxyBean(Object target, Interceptor interceptor) {        ProxyBean proxyBean = new ProxyBean();        //保存代理对象        proxyBean.target = target;        //保存拦截器        proxyBean.interceptor = interceptor;        //生成代理对象        Object proxy = Proxy.newProxyInstance(target.getClass().getClassLoader(),                target.getClass().getInterfaces(), proxyBean);        return proxy;    }    /**     * 处理代理对象
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值