1.介绍
1.1、构建力度
总体上我们期望大多数JavaBeans组件对于中等规模的控制是轻量级的,要让简单的case容易,尽可能让尽量多的行为是默认合乎情理的。
1.2、可移植性
JavaBeans架构一个主要目标是提供一个平台级的中立组件架构。当一个bean嵌套在另一个bean时我们提供全函数式实现通用所有平台。当顶层的rootBean被植入一些平台规范容器(例如:Word or Visual Basic or ClarisWorks or Netscape Navigator)那么JavaBeans APIs 应该被融入平台本地组件架构中。
打比方,在微软平台里,JavaBeans APIs将会被COM和ActiveX桥接进来。同样的,它也会将bean当成活对象一部分来对待。所以一个单个Bean应该有能力运行在很多不同的环境。在不同的目标环境,它应该有能力发送事件,服务方法调用等,就像任意其他组件一样。我们精心的确保各种各样的Beans APIs可以被干净的转换成三大主要的组件模型(notably OpenDoc, OLE/COM/ActiveX, and LiveConnect)。
1.3、统一的高质量API
写JavaBeans组件的人可以规划好一组APIs的一致性,让它们可以在任何地方工作。我们不希望Bean的实现必须对当前平台设备支持还要做发现检查。
1.4、简单
期望JavaBeans APIs相对简单。相对于构建重量级组件,我们关注创建小的轻量级组件,容易实现和使用。总的原则是我们不想发明庞大的java.beans.Everything类来让人继承。相反的我们期望JavaBeans运行时普通对象提供默认的行为,但允许继承java.beans.something规范的接口来重载一系列默认的行为。
我们的一个目标是人们应该能够快速的掌握基本JavaBeans的概念,这样他们可以花费很少功夫就能开始写和使用简单的组件,然后慢慢改进,使用在复杂特性的API里。
2.基本原理
2.1、什么是Bean?
最初的定义,然后提炼它:
JavaBean是一个可重用的软件组件,可以被构建工具可视化操作。
一些JavaBeans可能是简单的GUI元素,像按钮、滑动条;一些JavaBeans可能是复杂的软件组件,像数据库查看工具或数据流;一些Java Beans可能没有GUI特征,但也是由application builder组织在一起。
JavaBeans的统一特性如下:
2.1.1、 Beans和类库
不是所有有用的模块都要转换成beans。Beans适合软件组件中可视化操作以及定制化后获取一些效果。类库适合提供函数化的方式,这对程序员很有用,但对可视化操作不是很有利。
例如,提供JDBC数据库接入API使用类库方式比用bean更有意义,因为JDBC本质上是编程层面的API,而不是可视化层面的操作。然而在JDBC上层写一个数据库接入bean也是有意义的事情。因此,例如你可以在定制时写一个“select” bean帮助用户组装select语句,当应用运行时使用JDBC来运行select语句然后显示结果。
2.2、属性,事件和方法
Java Bean最重要的三个特征:一组暴露的属性、一组运行其他组件调用的方法、一组可以触发的事件。
2.3、设计时和运行时
我们运行运行时的接口在设计时被不同的类支持。
2.4、安全问题
JavaBeans适用于标准的Java安全模型。
总体上建议JavaBean开发者设计他们的beans以运行在不被信任的applets上。以下是主要建议bean APIS设计的方面:
内省:确保他们可以访问高级别的内省APIs和在设计环境中低级别反射APIs是无限制的,但是访问运行时环境是更多限制;
持久化:Beans应该在设计和运行环境期待被序列化和反序列化;
GUI合并:大意是不被信任的applets将不允许运行任何种的GUI合并。
2.5、本地触发
JavaBeans组件基本的运行模型是它们运行时和它们容器在相同地址空间。例如容器是Java应用,那么包含的bean运行在相同的Java虚拟机当成容器。如果容器是非Java应用,那么JavaBeans运行Java虚拟机时直接关联应用。
2.6、JavaBean作为远端状态的链接
JavaBean架构被设计成在分布式www环境下也能运行。设计分布式程序关键部分在于工程学上很好的划分本地和远程进程。单机上本地进程对快速交互有利,而远程访问会有高延迟和面临各式各样的调用失败。分布式系统设计者趋向于非常小心的设计远程接口,最小化远程交互数量,使用各种缓存技术,使用批处理减少远程传输。
相对于所有bean APIs通过网络工作,我们最初设计的目标bean APIs通过虚拟机工作,交互时开销要廉价很多,我们提供了几种可选的机制来允许beans开发者连接网络服务器。
三种主要的网络调用机制可以让JavaBeans开发者在所有Java平台有效使用:
2.7、不可见Beans
没有GUI(图形化用户界面)的beans也可以方法调用、事件触发、保存持久化状态等。它们仅仅是没有屏幕展示它们自己。所以如果一个bean运行在服务器它可能是不可见的,但如果它运行在用户桌面它可能有GUI展示。
2.8、多线程
多线程下bean的行为规范。多线程下beans的行为正确是每一个JavaBeans开发者的责任。简单的beans可以大体使用方法“synchronized”来确保。
2.9、国际化
JDK1.1中各种国际化APIs都加入到核心Java API集中。使用适当的strings使用java.util.getDefault(),正确的本地化strings被公共APIs使用。
2.10、Bean的可选类型视图
第一版的JavaBeans架构,每一个bean是一个单一的Java对象。然而后面版本的JavaBeans我们计划支持一组协作关联的对象实现。
绝不要将Java抛出成不同类型视图的Java bean角色。
例如:一个bean x是X类型,你想要转成java.awt.Component类型,应该这样:
java.awt.Component c = (java.awt.Component) Beans.getInstanceOf(x, java.awt.Component.class);
3.应用场景
本段主要目的是描述而不是规范使用
这里打算展示一些beans的使用,不是描述所有的可能。在不同的应用构建工具里提供各式各样的构建场景。
以下两个设计构建小程序的场景,但是在创建Java应用时步骤相同:
3.1、使用应用构建器构造小程序
这个场景中,用户通过应用构建器创建程序。应用构建器生成不同的源码,提供用户可以添加自己源码的模板。
3.2、在写的小程序里用beans
这个场景我们使用一些写的Java beans组件,完全类似于通过AWT组件构建一个Applet,而且打算描述beans是如何在没有特殊工具下使用的:
4.窗口环境问题
一系列特性在JDK1.1中加入了AWT,这些特性在“JDK 1.1- AWT增强”网页里有介绍。
4.1、统一数据转换机制
统一数据转换机制提出包含在AWT在内,打算提供基本的机制来使得对象、applets或者更高层的应用的数据交互结构化
4.2、粘贴/选择服务
b