【Bug】CGLIB与JDK17不兼容,依赖失效,模块化报错问题及解决方式ClassFormatError: accessible: module java.base does not ‘opens
【Bug】CGLIB与JDK17不兼容,依赖失效,模块化报错问题及解决方式ClassFormatError: accessible: module java.base does not ‘opens
引入:本文面向人CGLIB代理与JDK9+版本不兼容导致的报错一:报错信息和相关代码展示代码语言:javascript代码运行次数:0运行复制public class DynamicMain {
【Bug】CGLIB与JDK17不兼容,依赖失效,模块化报错问题及解决方式ClassFormatError: accessible: module java.base does not ‘opens
引入:本文面向人CGLIB代理与JDK9+版本不兼容导致的报错
public class DynamicMain {
public static void main(String[] args) {
//subject可以翻译为对象,代理对象
HouseSubject target= new RealHouseSubject();
//创建一个代理对象
HouseSubject proxy = (HouseSubject)
(target.getClass(), new CGLIBInterceptor(target));
proxy.rentHouse();
}
}
代码语言:javascript代码运行次数:0运行复制package springaop.brokerdemo2;
import lombok.val;
import net.proxy.MethodInterceptor;
import net.proxy.MethodProxy;
import java.lang.reflect.Method;
import java.sql.SQLOutput;
/**
* Created with IntelliJ IDEA.
* Description:
* User: Hua YY
* Date: 2024-12-0
* Time: 11:25
*/
public class CGLIBInterceptor implements MethodInterceptor {
//目标对象,被代理的对象
private Object target;
public CGLIBInterceptor(Object target){
= target;
}
@Override
public Object intercept(Object o, Method method
, Object[] objects, MethodProxy methodProxy) throws Throwable {
//代理增强内容
println("我是中介,开始代理");
//调用方法(反射机制)
Object retVal = method.invoke(target, objects);
//代理增强内容
println("我是中介,代理结束");
return retVal;
}
}
首先想到的是JDK版本过高,于是改用JDK8,依然报错,于是降低CJLIB版本依赖,再分别进行测试依旧报错。
该错误的根本原因是 Java 9+ 模块化(JPMS)导致的问题。在 JDK 9 引入了模块系统之后,CGLIB 在动态生成代理类时,需要访问 java.lang.ClassLoader
的一些内部方法,但是 Java 的模块系统限制了对这些方法的访问。具体来说,java.base
模块没有开放 java.lang
包中的一些类和方法给其他模块,导致 CGLIB 无法访问这些方法,最终抛出了 InaccessibleObjectException
。
修改 IDE 配置(如果使用 IntelliJ IDEA)
如果你是通过 IntelliJ IDEA 运行程序,可以在运行/调试配置中添加该参数:
- 打开 Run/Debug Configurati(运行/调试配置)。
- 到你的程序配置(例如
DynamicMain
)。 - 在 VM opti 字段中添加如下代码
--add-opens java.base/java.lang=ALL-UAMED
4:具体操作步骤如下
代码运行成功
#感谢您对电脑配置推荐网 - 最新i3 i5 i7组装电脑配置单推荐报价格的认可,转载请说明来源于"电脑配置推荐网 - 最新i3 i5 i7组装电脑配置单推荐报价格
上传时间: 2025-07-22 07:07:33
上一篇:【算法】归并排序
推荐阅读
留言与评论(共有 17 条评论) |
本站网友 天机棒 | 9分钟前 发表 |
依赖失效 | |
本站网友 中国剪报 | 23分钟前 发表 |
Object[] objects | |
本站网友 王克明 | 15分钟前 发表 |
objects); //代理增强内容 println("我是中介 | |
本站网友 玛丽在隔壁 | 11分钟前 发表 |
module java.base does not ‘opens 引入:本文面向人CGLIB代理与JDK9+版本不兼容导致的报错一:报错信息和相关代码展示代码语言:javascript代码运行次数:0运行复制public class DynamicMain { public static void main(String[] args) { //subject可以翻译为对象 | |
本站网友 银行贷款政策 | 2分钟前 发表 |
new CGLIBInterceptor(target)); proxy.rentHouse(); } }代码语言:javascript代码运行次数:0运行复制package springaop.brokerdemo2; import lombok.val; import net.proxy.MethodInterceptor; import net.proxy.MethodProxy; import java.lang.reflect.Method; import java.sql.SQLOutput; /** * Created with IntelliJ IDEA. * Description | |
本站网友 王晓宁 | 9分钟前 发表 |
代理对象 HouseSubject target= new RealHouseSubject(); //创建一个代理对象 HouseSubject proxy = (HouseSubject) (target.getClass() | |
本站网友 鱼腥草孕妇 | 25分钟前 发表 |
原始发表:2025-01-1 | |
本站网友 增肥方法 | 17分钟前 发表 |
原始发表:2025-01-1 | |
本站网友 怎样治疗早泄 | 1分钟前 发表 |
被代理的对象 private Object target; public CGLIBInterceptor(Object target){ = target; } @Override public Object intercept(Object o | |
本站网友 小儿口疮 | 13分钟前 发表 |
java.base 模块没有开放 java.lang 包中的一些类和方法给其他模块 | |
本站网友 武夷山公馆大桥 | 4分钟前 发表 |
module java.base does not ‘opens 引入:本文面向人CGLIB代理与JDK9+版本不兼容导致的报错一:报错信息和相关代码展示代码语言:javascript代码运行次数:0运行复制public class DynamicMain { public static void main(String[] args) { //subject可以翻译为对象 | |
本站网友 射干抗病毒注射液 | 16分钟前 发表 |
依赖失效 | |
本站网友 综合维生素 | 28分钟前 发表 |
代理对象 HouseSubject target= new RealHouseSubject(); //创建一个代理对象 HouseSubject proxy = (HouseSubject) (target.getClass() | |
本站网友 北京萨莉亚 | 21分钟前 发表 |
模块化报错问题及解决方式ClassFormatError | |
本站网友 大皇后 | 6分钟前 发表 |
三:错误原因该错误的根本原因是 Java 9+ 模块化(JPMS)导致的问题 | |
本站网友 鸽子汤怎么炖 | 21分钟前 发表 |
accessible |