首页 > 编程语言 >JDK的dt.jar和Java BeanInfo接口

JDK的dt.jar和Java BeanInfo接口

时间:2022-12-05 10:45:23浏览次数:40  
标签:Java JDK BeanInfo jar return dt tools public

在JAVA_HOME/lib下面有两个比较重要的jar文件,tools.jar和dt.jar。

 

tools.jar在上篇文章中做了简单的介绍。这里来介绍下dt.jar。

在Oracle官方网站搜dt.jar,找到JDK and JRE File Structure这个页面,如下

https://docs.oracle.com/javase/7/docs/technotes/tools/solaris/jdkfiles.html

有如下的一段话

/jdk1.7.0/lib

Files used by the development tools. Includes tools.jar, which contains non-core classes for support of the tools and utilities in the JDK. Also includes dt.jar, the DesignTime archive of BeanInfo files that tell interactive development environments (IDE's) how to display the Java components and how to let the developer customize them for an application.翻译一下:

/jdk1.7.0/lib

开发工具使用的文件。包括tools.jar和dt.jar。tools.jar包含支持JDK中各个工具的非核心的类。也包括dt.jar,dt.jar是设计时BeanInfo文件的归档,告诉可交互的开发环境如何显示Java的组件和如何让开发者自定义他们的应用程序。

dt.jar的解释中有两个点:

1.设计时(DesignTime)是跟运行时(Runtime)对象,简单点说就是一个是写程序的时候,一个是跑程序的时候。

2.BeanInfo文件,关于这个BeanInfo文件,我们可以打开dt.jar文件看一下。

 

 

确实全是xxxBeanInfo的类。再仔细看一下,前面的XXX都是Swing的各个组价。

首先查找下BeanInfo是干啥的。

在Oracle官网查找BeanInfo,找下下面的页面,发现BeanInfo是个接口,

https://docs.oracle.com/javase/7/docs/api/java/beans/BeanInfo.html

先看下doc是怎么说的,下面是BeanInfo接口的Java Doc翻译,

public interface BeanInfo

一个bean的具体实现者,如果想提供关于这个bean的明确的信息,他可以提供一个实现了BeanInfo接口的BeanInfo类,来提供关于这个Bean的方法,属性,事件等的明确的信息。

一个Bean的实现者不需要提供一系列完整的明确的信息。你可以选择你想提供的信息,剩下的信息将通过低级的反射Bean类的方法和应用标准的设计模式自动分析来获取。

你有机会提供很多不同的信息作为XyZDescriptor类的一部分。但是不必惊慌,其实你只需要提供各个构造方法需要的最小限度的核心信息。

更形象的信息可以去查看BeanInfo接口的几个getter方法。JDK还提供了一个SimpleBeanInfo类,BeanInfo接口的一个简单的实现。可以简单看一下。

上面提到一句话,tools.jar和dt.jar都是给开发工具用的。下面看一下这套API是怎么用的。

首先写一个MyClass类

package com.highgo.test.beaninfo;
 
public class MyClass {
    private String field1;
 
    public String getField1() {
        return field1;
    }
 
    public void setField1(String field1) {
        this.field1 = field1;
    }
}

在写一个MyClassBeanInfo类,注意这个类的命名,MyClass+BeanInfo

package com.highgo.test.beaninfo;
 
 
import java.awt.Image;
import java.beans.BeanDescriptor;
import java.beans.BeanInfo;
import java.beans.EventSetDescriptor;
import java.beans.MethodDescriptor;
import java.beans.PropertyDescriptor;
 
 
public class MyClassBeanInfo implements BeanInfo{
 
 
    @Override
    public BeanDescriptor getBeanDescriptor() {
        // TODO Auto-generated method stub
        BeanDescriptor bd = new BeanDescriptor(MyClass.class);
        bd.setName("MyName");
        bd.setDisplayName("MyDisplayName");
        bd.setShortDescription("Hi, My First BeanInfo Test!");
        return bd;
    }
 
 
    @Override
    public EventSetDescriptor[] getEventSetDescriptors() {
        // TODO Auto-generated method stub
        return new EventSetDescriptor[0];
    }
 
 
    @Override
    public int getDefaultEventIndex() {
        // TODO Auto-generated method stub
        return 0;
    }
 
 
    @Override
    public PropertyDescriptor[] getPropertyDescriptors() {
        // TODO Auto-generated method stub
        return new PropertyDescriptor[0];
    }
 
 
    @Override
    public int getDefaultPropertyIndex() {
        // TODO Auto-generated method stub
        return 0;
    }
 
 
    @Override
    public MethodDescriptor[] getMethodDescriptors() {
        // TODO Auto-generated method stub
        return new MethodDescriptor[0];
    }
 
 
    @Override
    public BeanInfo[] getAdditionalBeanInfo() {
        // TODO Auto-generated method stub
        return new BeanInfo[0];
    }
 
 
    @Override
    public Image getIcon(int iconKind) {
        // TODO Auto-generated method stub
        return null;
    }
 
 
}

测试一下

import com.highgo.test.beaninfo.MyClass;
 
public class Test{
    public static void main(String[] args) throws IntrospectionException {
        BeanInfo bi2 = Introspector.getBeanInfo(MyClass.class);
        System.out.println(bi2.getBeanDescriptor());
    }
}

控制台

java.beans.BeanDescriptor[name=MyName; displayName=MyDisplayName; shortDescription=Hi, My First BeanInfo Test!; beanClass=class com.highgo.test.beaninfo.MyClass]

IDE估计也基本上就是这么用的了。

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

标签:Java,JDK,BeanInfo,jar,return,dt,tools,public
From: https://www.cnblogs.com/jijm123/p/16951688.html

相关文章

  • (笔记)JMH基准测试,不错的JAVA基准测试工具
    测试JAVA中的方法的执行性能,比较稳妥合理的方法,是用JMH(​​https://openjdk.java.net/projects/code-tools/jmh/​​)这个JAVA的测试工具。1)MAVEN加入库: <properties>......
  • 快速比较JAVA中两个集合是否相等
    有几个方法:1)如果是不在乎顺序,只要内容相同就可以认为相等,则:public<TextendsComparable<T>>booleanisEquals(List<T>list1,List<T>list2){if(list1==nul......
  • Java同步器之ReentrantLock源码分析(一)
    一、概述ReentrantLock是Java并发包中提供的一个可重入的互斥锁。ReentrantLock和synchronized在基本用法,行为语义上都是类似的,同样都具有可重入性。只不过相比原生的Sync......
  • 两道面试题,带你解析Java类加载机制
    在许多Java面试中,我们经常会看到关于Java类加载机制的考察,例如下面这道题:classGrandpa{static{System.out.println("爷爷在静态代码块");}}classFatherextendsGra......
  • JAVA 解压缩代码写法
    packagecom.chinaunicom.asset.common.utils.compress;importlombok.extern.slf4j.Slf4j;importorg.apache.commons.compress.archivers.ArchiveEntry;importorg.......
  • Java8新特性之方法引用
    1.1基本概念方法引用主要指通过方法的名字来指向一个方法而不需要为方法引用提供方法体,该方法的调用交给函数式接口执行。方法引用是在特定场景下lambda表达式的一种......
  • JavaScript入门⑤-欲罢不能的对象原型与继承-全网一般图文版
    JavaScript入门系列目录JavaScript入门①-基础知识筑基JavaScript入门②-函数(1)基础{浅出}JavaScript入门③-函数(2)原理{深入}执行上下文JavaScript入门④-万物皆......
  • javascript中屏蔽esc键
     今天有客户说网页输入时,不小心按ESC键,结果把结果清除了,想屏蔽,其实是可以的,虽然要求怪怪,JAVASCRIPT可以实现:<scripttype="text/javascr......
  • jaxb中对java.util.Date的处理
    JAXB是个好东西,转换JAVAOBJECT到XML的,最近发现JAXB中对java.util.Date的转换有些要注意的地方,笔记之。比如有一个POJO如下:importjava.util.Date;p......
  • javascrpt 监听元素变化的两个API
    <!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"/><metahttp-equiv="X-UA-Compatible"content="IE=edge"/><metaname="viewport"c......