面试被虐的小lala 2022-04-08 23:44 采纳率: 25%
浏览 39
已结题

在练习jdk动态代理时出现的问题

报错信息如下:

Exception in thread "main" java.lang.ClassCastException: class jdk.proxy1.$Proxy0 cannot be cast to class com.qian.dao.StudentDao (jdk.proxy1.$Proxy0 is in module jdk.proxy1 of loader 'app'; com.qian.dao.StudentDao is in unnamed module of loader 'app')
    at TTT.text.main(text.java:12)

接口:

package com.qian.dao;

public interface dao {
    void dd();
}


实现类:


```java

package com.qian.dao;

import lombok.Data;

@Data
public class StudentDao implements dao{
    public void dd(){
        System.out.println("你好");
    }
}

代理类:
public class ProxyInvocation implements InvocationHandler {
    //被代理的接口
    private Object target;

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

    //生成得到代理类
    public Object getProxy() {
        return Proxy.newProxyInstance(this.getClass().getClassLoader(),
                target.getClass().getInterfaces(),
                this);
    }

    /**
     * Proxy.newProxyInstance(JdbcPool.class.getClassLoader(), conn.getClass().getInterfaces(), hander);
     *
     * Proxy.newProxyInstance(JdbcPool.class.getClassLoader(), new Class[]{com.mysql.jdbc.Connection.class}, hander)
     * @param proxy
     * @param method
     * @param args
     * @return
     * @throws Throwable
     */
    //处理代理实例
    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
        //Log(method.getName());
        return method.invoke(target.getClass().newInstance(), args);
    }
}

测试类:
public class text {
    public static void main(String[] args) {
        dao studentDao=new StudentDao();
        ProxyInvocation invocation = new ProxyInvocation();
        invocation.setTarget(studentDao);
        StudentDao proxy = (StudentDao) invocation.getProxy();
        proxy.dd();
    }
}


  • 写回答

2条回答 默认 最新

  • terfation 2022-04-09 00:36
    关注

    Proxy.newProxyInstance的第一个参数改为target的类加载器

    评论

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 7月4日
  • 创建了问题 4月8日

悬赏问题

  • ¥15 C++ 头文件/宏冲突问题解决
  • ¥15 用comsol模拟大气湍流通过底部加热(温度不同)的腔体
  • ¥50 安卓adb backup备份子用户应用数据失败
  • ¥20 有人能用聚类分析帮我分析一下文本内容嘛
  • ¥15 请问Lammps做复合材料拉伸模拟,应力应变曲线问题
  • ¥30 python代码,帮调试
  • ¥15 #MATLAB仿真#车辆换道路径规划
  • ¥15 java 操作 elasticsearch 8.1 实现 索引的重建
  • ¥15 数据可视化Python
  • ¥15 要给毕业设计添加扫码登录的功能!!有偿