前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >没有接口实现类代理

没有接口实现类代理

作者头像
CBeann
发布2023-12-25 17:41:37
990
发布2023-12-25 17:41:37
举报
文章被收录于专栏:CBeann的博客CBeann的博客

问题的提出

正常的jdk动态代理和cglib代理都是通过传入实体类实现的,dubbo的消息提供者是没有接口的实现类的,那怎么实现的?

实现

接口
代码语言:javascript
复制
package com.proxynoimpl;

/**
 * @author CBeann
 * @create 2020-03-09 17:37
 */
public interface IEmailService {

    String selectById();
}
代理工厂
代码语言:javascript
复制
package com.proxynoimpl;

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

/**
 * @author CBeann
 * @create 2020-03-09 17:37
 */
public class FactoryProxy<T> implements InvocationHandler {

    private Class<T> proxyInterface;
    //这里可以维护一个缓存,存这个接口的方法抽象的对象



    FactoryProxy(Class<T> proxyInterface){
        this.proxyInterface = proxyInterface;
    }


    @Override
    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
        if (method.getName().equals("selectById")){
            //String result = (String) method.invoke(proxyInterface,args);
            //这里可以得到方法抽象对象来调用真的的查询方法
            System.out.println("selectById调用成功");
        }
        return null;
    }

    public T getProxy(){
        return (T) Proxy.newProxyInstance(proxyInterface.getClassLoader(),new Class[]{proxyInterface},this);
    }
}
测试类
代码语言:javascript
复制
package com.proxynoimpl;

/**
 * @author CBeann
 * @create 2020-03-09 17:38
 */
public class AppStart {

    public static void main(String[] args) {
        FactoryProxy<IEmailService> emailService = new FactoryProxy(IEmailService.class);
        IEmailService subject2 = emailService.getProxy();
        subject2.selectById();
    }
}

测试结果

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-03-07,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 问题的提出
  • 实现
    • 接口
      • 代理工厂
        • 测试类
        相关产品与服务
        腾讯云服务器利旧
        云服务器(Cloud Virtual Machine,CVM)提供安全可靠的弹性计算服务。 您可以实时扩展或缩减计算资源,适应变化的业务需求,并只需按实际使用的资源计费。使用 CVM 可以极大降低您的软硬件采购成本,简化 IT 运维工作。
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档