Java新建Maven项目学习Spring注解开发显示:Caused by: java.lang.reflect.InaccessibleObjectException

发生缘由

  • 学习Spring中IOC/DI注解开发

环境

  • jdk版本:jdk-16.0.2
  • Idea版本:2021.2
  • 电脑系统:win10

问题及补救

问题描述

新建如下类和接口:

1
2
3
public interface BookDao {
   public void save();
}
1
2
3
4
5
6
7
@Component("bookDao")
public class BookDaoImpl implements BookDao {
    @Override
    public void save() {
        System.out.println("book dao save ...");
    }
}
1
2
3
4
@Configuration
@ComponentScan("com.linxuan.dao.impl")
public class SpringConfig {
}
1
2
3
4
5
6
7
public class AppForAnnotation {
    public static void main(String[] args) {
        ApplicationContext ctx = new AnnotationConfigApplicationContext(SpringConfig.class);
        BookDao bookDao = (BookDao) ctx.getBean("bookDao");
        System.out.println(bookDao);
    }
}

运行主方法却发现报错,报错信息如下:

报错信息

解决方案

  • 笔者使用的JDK版本是16,而反射自从JDK8之后就有了限制:JDK 9将类型和资源封装在模块中。
  • JDK9以上模块不能使用反射去访问非公有的成员/成员方法以及构造方法,除非模块标识为opens去允许反射访问。否则会产生非法反射警告。

解决方法如下:

  1. 点击右上角的Select Run/Debug Configuration
  2. 点击Edit Configurations...
  3. 点击Modify options
  4. 点击Add VM options
  5. 这时会在Run/Debug Configurations窗口上面多出现一个名为Add VM options的方框。我们只需要在里面键入下面代码即可: --add-opens java.base/java.lang=ALL-UNNAMED 
  6. 点击Apply,点击OK。右键运行,那么就没有问题了。

————————————————
版权声明:本文为CSDN博主「此方星河」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/m0_51426055/article/details/124419048

posted @   炸天帮帮主  阅读(1869)  评论(1编辑  收藏  举报
相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
点击右上角即可分享
微信分享提示