Java Bean Introspector需要桌面模块

时间:2018-04-11 20:49:55

标签: java java-9 jigsaw java-module

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

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

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

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

1 个答案:

答案 0 :(得分:5)

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

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

没有创建该依赖项,没有更精细的粒度和使用bean类的解决方案。 JDK开发人员如何处理由此决定引起的问题,可以很好地说明这一点。由于java.util.logging.LogManagerjava.util.jar.Pack200.Packer / Unpacker支持java.beans.PropertyChangeListener,导致对java.desktop的依赖,如果保持这种方式,这些方法是第一种方法从标准Ja​​va API中删除,与第一次在Java 8中弃用并在Java 9中已被删除一样快。

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