[英]Java Beans Introspector requires desktop module
我正在研究使用Jigsaw来减少微服务的占用空间。 我必须找到的最后一个依赖项是java.beans.Introspector。
想象一下,当我发现需要引入整个模块java.desktop时,我感到惊讶,该模块包含各种不相关的东西,例如awt,applet,swing等。
在我看来,这很疯狂,可以肯定的是,bean的自省应该是基本语言的一部分,并且与UI功能无关。 我认为依赖项来自Spring Boot的嵌入式Tomcat,因此我无法自行修改。
问题:模块是您可以访问的最细粒度,还是有另一种方式来减少脂肪。
之所以存在依赖关系,是因为BeanInfo
和SimpleBeanInfo
引用了AWT包中的Icon
和Image
。 此外, PropertyEditor
声明的方法getCustomEditor
和paintValue
创建依赖的类Component
, Graphics
和Rectangle
。 API中还有一些不可见的类,其中包含对桌面类的引用,即为这些桌面类提供的默认属性编辑器和持久性委托实现。
由于Java模块不允许程序包跨多个模块散布,因此无法将功能拆分为AWT依赖模块和非依赖模块(以向后兼容的方式)。 动态加载的工件(即实际的bean信息,编辑器和持久性委托)可以移到另一个模块中,但不能移到BeanInfo
和PropertyEditor
接口及其SimpleBeanInfo
和PropertyEditorSupport
实现中。
没有更好的粒度,没有在不创建依赖项的情况下使用Bean类的解决方案。 JDK开发人员如何处理此决定引起的问题可以很好地说明这一点。 由于java.util.logging.LogManager
和java.util.jar.Pack200.Packer
/ Unpacker
支持java.beans.PropertyChangeListener
,这导致对java.desktop
的依赖,如果保持这种方式,则这些方法是有史以来的第一个方法从标准Java API中删除,速度与Java 8中首次弃用并已在Java 9中删除一样快。
我认为,如果有一种方法可以声明对像PropertyChangeListener
类的基本bean类的依赖关系, java.desktop
创建不必要的依赖关系,那么JDK开发人员就不会设置该先例。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.