没有接口实现类代理

简介: 没有接口实现类代理

问题的提出


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


实现


接口


package com.proxynoimpl;
/**
 * @author CBeann
 * @create 2020-03-09 17:37
 */
public interface IEmailService {
    String selectById();
}


代理工厂


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);
    }
}


测试类


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();
    }
}


测试结果


20.png

目录
相关文章
|
Java
类与接口介绍
在Java中,类和接口是两种重要的概念,用于描述对象的属性和行为。它们是面向对象编程的基础,用于组织和管理代码。 类(Class)是一种模板或蓝图,用于创建对象。它定义了对象的属性和行为。类是Java中最基本的组织单元,所有的对象都是根据类来创建的。类由字段(属性)和方法组成。字段表示对象的状态或属性,而方法表示对象的行为或操作。 以下是一个简单的Java类的示例: ```java public class Person { // 字段 private String name; private int age; // 构造方法 publi
59 0
|
6月前
|
Java
如何在类中实现并调用多个接口中的共享方法。
如何在类中实现并调用多个接口中的共享方法。
48 1
课外作业(2)接口+工厂方法 文件上传题 1. 接口作业题
课外作业(2)接口+工厂方法 文件上传题 1. 接口作业题
|
6月前
|
SQL Java 数据库连接
JAVAJDBC中常用的接口和类
JAVAJDBC中常用的接口和类
83 0
JDK动态代理为什么只能代理有接口的类?
JDK动态代理为什么只能代理有接口的类?
|
设计模式 Java 索引
【设计模式】代理模式 ( 动态代理使用流程 | 创建目标对象 | 创建被代理对象 | 创建调用处理程序 | 动态创建代理对象 | 动态代理调用 )
【设计模式】代理模式 ( 动态代理使用流程 | 创建目标对象 | 创建被代理对象 | 创建调用处理程序 | 动态创建代理对象 | 动态代理调用 )
125 0
【设计模式】代理模式 ( 动态代理使用流程 | 创建目标对象 | 创建被代理对象 | 创建调用处理程序 | 动态创建代理对象 | 动态代理调用 )
|
缓存 Java
面试官:为什么jdk动态代理只能代理接口实现类?
以上,从源码维度也佐证了jdk动态代理依赖接口,只有实现了接口的类的方法才能被加入到代理类中生成代理方法,最终完成代理功能。
面试官:为什么jdk动态代理只能代理接口实现类?
|
Java Spring 容器
自定义ApplicationContextInitializer接口实现
自定义ApplicationContextInitializer接口实现
258 0