Java Bean Introspector需要桌面模块

Sim*_*san 6 java java-platform-module-system java-9 java-module

我正在调查使用Jigsaw来减少微服务的占用空间.我必须找到的最后一个依赖项是java.beans.Introspector.

想象一下,当我发现我需要引入整个模块java.desktop时,我会感到惊讶,它包含各种不相关的东西,比如awt,applets,swing等.

这对我来说似乎很疯狂,当然bean内省应该是基本语言的一部分,与UI功能无关.我认为依赖来自Spring Boot的嵌入式Tomcat,所以我不能自己修改它.

问题:模块是您可以访问的最精细的粒度还是有另一种方法来修剪脂肪.

Hol*_*ger 5

依赖存在,因为BeanInfo并且SimpleBeanInfo具有AWT包的引用IconImage来自AWT包的引用.此外,API中有一些类不可见,它们引用了桌面类,即为这些桌面类提供的默认属性编辑器和持久性委托实现.

由于Java模块不允许将包分布在多个模块上,因此无法将功能拆分为AWT相关模块和非相关模块(以向后兼容的方式).动态加载的工件,即实际的bean信息,编辑器和持久性委托,可能已被移动到另一个模块,但不是PropertyEditor接口及其getCustomEditor实现.

在没有创建依赖关系的情况下,没有更精细的粒度和使用bean类的解决方案.JDK开发人员如何处理由此决定引起的问题,可以很好地说明这一点.由于paintValue?Component/或Graphics支持Rectangle导致依赖BeanInfo,如果保持这种方式,这些方法是从标准Ja​​va API中删除的第一个方法,尽可能快地在Java 8中首次被弃用并且已经在Java 9中删除了.

我认为,如果有一种方法可以声明对基本bean类的依赖,比如PropertyEditor没有创建不需要的依赖项SimpleBeanInfo,那么JDK开发人员就没有设置这个先例.

  • 注释"在API中不可见,引用了桌面类"是误导性的.请查看Beans.instantiate,BeanInfo.getIcon,SimpleBeanInfo.loadImage等API以及其他方法.如果有建议以不破坏现有代码的方式拆分java.beans API,那么请将这些提议带到OpenJDK. (2认同)