在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
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预计也基本上就是这么用的了。
原文:http://www.cnblogs.com/mengfanrong/p/5061319.html