`
libran
  • 浏览: 193273 次
  • 性别: Icon_minigender_1
  • 来自: 天津
文章分类
社区版块
存档分类
最新评论

写bean类的准则

阅读更多
写 bean 的最好方法是遵循 Sun Microsystems 的 JavaBean 规范。您可以在 www.javasoft.com 上获得更多关于 JavaBean 的信息。

一般的 bean 需求
特性
操作
事件
提示和窍门


一般要求
首先,您必须有一个不带有参数的公用构造器。此构造器也应该通过调用各个特性的设置方法来设置特性的缺省值,例如:

public Fireworks()
{
setAutoStart(true);
setBackground(Color.black);
setSpeed(10);
setRadius(40);
.
.
.
}

如果 bean 是一个从 java.awt.Component 类继承而来的可视 bean,您就应该为 bean 定义一个缺省的首选大小,例如: public Dimension getPreferredSize()
{
return (new Dimension(radius*3, radius*3));
}

public Dimension getMinimumSize()
{
return getPreferredSize();
}


特性
对于您需要的每个特性,您应该有一个带有匹配公用 getter 和 setter 方法的专用实例变量,例如:

private int speed;
.
.
.
public int getSpeed()
{
return speed;
}

public void setSpeed(int s)
{
speed = s;
}

此 get 和 set 方法必须有与实例变量相同的名称,但是第一个字母要大写并以 get 和 set 开头。

由于连接而在任何时候更改它们的特性时,确认 Bean 在运行时行为正确也是很重要的。如果特性的更改影响到 Bean 的可视外观,您应该以此特性设置的方法来调用

repaint();。


同样,如果特性的更改影响到 bean 的大小和位置,您需要确认获得验证的事物。我们建议编写您自己的 validateAll 方法,如下所示:

private void validateAll()
{
if (isValid())
{
Component self = this;
self.invalidate();
Component myParent = self.getParent();
if (myParent != null)
{
myParent.invalidate();
self = myParent;
}
self.validate();
}
}

然后以此特性设置的方法调用

validateAll();。


bean 类将无法进行关于调用特性设置方法命令的假设。您应该写 bean 以便可以初始构造它,然后在不引起错误的同时在任何命令中设置其特性。


操作
对于每个您需要的操作,您应该有一个公用方法,例如:

public void start()
{
if(thread==null)
{
thread=new Thread(this);
thread.start();
}
}

您为操作写的方法应该在无须期待用户创建连接或设置很多特性的情况下独立操作。 例如,如果您写了一个音频 Bean,您希望通过播放操作处理打开声音的所有步骤、完成您需要的所有设置并播放声音。同样,即使声音未播放,停止操作也应起作用。

事件
对于您需要的每个事件或事件设置,您应该定义事件和侦听器类。对于此例,查看 FireworksEvent.java 源文件以及 Fireworks.java 文件。此事件类的源应该如同这样:

import java.awt.*;
import java.util.*;

public class FireworksEvent extends EventObject
{
public static final int EXPLODED = 1;

int id = 0;

public FireworksEvent(Component source, int id)
{
super(source);
this.id = id;
}

public int getID()
{
return id;
}
}

您应该为此事件设置中的每个事件定义一个公用静态结束事件标识符,例如在此例子中的 EXPLODED。

对于侦听器类的源,查看 FireworksListener.java 源文件:

import java.util.*;

public interface FireworksListener extends EventListener
{
public abstract void exploded(FireworksEvent e);
}

您应该为此事件设置中的每个事件定义一个公用抽象方法,例如在此例子中的 exploded。 而且,侦听器类必须扩展 EventListener ,以使 JAR 向导能够找到它。

然后,如果由 bean 类播送事件,它必须跟踪侦听事件的对象。要这样做,您需要定义侦听器实例变量以及 addListener 和 removeListener 方法。返回 Fireworks.java 源,例如,您将查看到:

private Vector listeners = new Vector();
.
.
.
public void addFireworksListener(FireworksListener f)
{
listeners.addElement(f);
}

public void removeFireworksListener(FireworksListener f)
{
listeners.removeElement(f);
}

最后,bean 类需要以正确的次数将事件实际播送到所有的侦听器。要这样做,您需要定义 processEvent 方法并以适当的次数调用它,例如:

public void processFireworksEvent(FireworksEvent e)
{
for (Enumeration enum = listeners.elements(); enum.hasMoreElements(); )
((FireworksListener)enum.nextElement()).exploded(e);
}

public void run()
{
.
.
.
processFireworksEvent(new FireworksEvent(this, FireworksEvent.EXPLODED));
}


提示和窍门
如果您要创建产品级 Bean,请记住先做八件事:

使 bean 越小越好,但要注意当前的浏览器是否支持小 bean
bean 或许导致工具滞后,继而导致浏览器滞后,最终导致 JDK 自身滞后。如果您必须使用切边的类,或者 bean 的性质要求 bean 较大,则您应该考虑将您的 bean 作为一个插件, 并在一个自包含 jar 中发送它,或者如有可能,使它具有自己的小安装过程。您将失去某些小 bean 的优势:

Web 管理员必须多执行一个步骤:提醒用户在浏览 Web 页面之前必须先下载和安装您的 jar 或安装程序
网上冲浪者也必须多执行一个步骤:在浏览 Web 页面之前先下载和安装您的 jar 或安装程序。


使您的 bean 可翻译
将所有的翻译文本,包括名称和 bean 的简短描述及其特征,分隔成 .properties 文件。JAR 向导会为您做这些。

您需要记住并自己完成的两件事是:特性编辑器和定制器。定制器、对话框特性编辑器或选择特性编辑器中的所有术语,例如高、中、低,也必须为翻译而分隔。 理想情况下,您也可以实际翻译 bean 并在 Bean 的 jar 中提供各种语言的 .properties 文件。 然而,如果您至少提供了本地语言 .properties 文件,则第三方可为您翻译 bean。


在文件清单中为 bean 指定 Depends-On: 标记
将 Bean 的 jar 中的所有文件标识为“运行时需要 vs. 只在编辑时需要”。在运行时需要的所有文件将列示在 jar 清单文件的依赖于:标签后。JAR 向导的发布标签使这个操作很简单,并使您获得清单文件权。

如果您不指定依赖于:标签,工具将假设所有文件都是在运行时需要。这对于下载性能(例如不必要地下载特性编辑器和其它只在编辑时需要的文件)是很不好的。


赋予您的 bean 一个明确的首选大小
bean 将实现 getPreferredSize 方法,以便当首次用可能未定义的关键字特性构造时,它的表现良好。 如果在第一次放入时,bean 是 0 x 0 象素,那么用户可能会混淆。 当更改关键字特性时,首选大小也应正常工作。例如,如果 bean 有一个在垂直和水平方位间转换的特性,则首选大小应被写入以相应地调整自身。


为 bean 指定缺省特性
利用 JavaBean 规范中的缺省特性部分,它将使您的 bean 在某些工具中易于使用。 JAR 向导使这个操作变得简单并为您获得 BeanInfo 权。


为 bean 及其特性指定简要的非技术名称和简短描述
寻找简要的非技术名来代替冗长的技术术语。例如,用 sum interval 代替 accumulatorInterval。还请注意,特性名的首选项以小写表示并在字与字间留有空格,这对于用户将更友好。


缩小用户可见的特性范围
为 bean 提供一个明确的 BeanInfo 以便不将每个实例变量都显示为 bean 的特性,而且不将每个方法显示为 Bean 的操作。 JAR 向导使这个操作变得简单并为您获得 BeanInfo 权。


为 bean 指定大图标和小图标
最后,为 Bean 提供大的(32x32)和小的(16x16)彩色图标。而且,确保图标有一个不同于灰色的透明背景。尽管很少使用,您也应养成提供黑色和白色图标的习惯。JAR 向导的调色板 标签使这个操作变得简单,并使您获得 BeanInfo
分享到:
评论

相关推荐

    Java开发者需坚守的十大基本准则

    例如,在仅有少数用户的小型应用程序中引入企业级Java Bean (EJB) 或实现不必要的框架等。这种做法不仅增加了项目的复杂度,还可能导致维护成本上升。正确的做法是寻求简单有效的解决方案,并且在不确定最佳实践时,...

    实践类考核课程3 实验代码+实验报告

    学生应仔细阅读这份文档,理解实验要求和评分准则,以确保他们的工作满足所有要求。 "JEE_news_Web" 文件夹很可能是项目的Web层部分,使用JavaServer Pages (JSP) 和Servlet来呈现用户界面和处理HTTP请求。JSP是...

    beanstalkd:Beanstalk是一个简单,快速的工作队列

    请注意,该项目是与贡献者行为准则一起发布的。 通过参与该项目,您同意遵守其条款。 有关详细信息,请参见CodeOfConduct.txt。快速开始$ make$ ./beanstalkd也尝试$ ./beanstalkd -h$ ./beanstalkd -VVV$ make ...

    一步步实现Spring框架(一)项目搭建

    接下来,我们需要实现一个读取并解析XML配置文件的类,这通常是通过`ApplicationContext`实现的。`ApplicationContext`是Spring提供的一种高级IOC容器,它不仅可以加载配置文件,还可以处理事件、提供国际化支持等。...

    java联想(中文)

    9.8.1 违例准则 9.9 总结 9.10 练习 第10章 Java IO系统 10.1 输入和输出 10.1.1 InputStream的类型 10.1.2 OutputStream的类型 10.2 增添属性和有用的接口 10.2.1 通过FilterInputStream从InputStream里读入数据 ...

    Thinking in Java(中文版 由yyc,spirit整理).chm

    9.8.1 违例准则 9.9 总结 9.10 练习 第10章 Java IO系统 10.1 输入和输出 10.1.1 InputStream的类型 10.1.2 OutputStream的类型 10.2 增添属性和有用的接口 10.2.1 通过FilterInputStream从InputStream里读入数据 ...

    Think in Java(中文版)chm格式

    9.8.1 违例准则 9.9 总结 9.10 练习 第10章 Java IO系统 10.1 输入和输出 10.1.1 InputStream的类型 10.1.2 OutputStream的类型 10.2 增添属性和有用的接口 10.2.1 通过FilterInputStream从InputStream里...

    JAVA_Thinking in Java(中文版 由yyc,spirit整理).chm

    9.8.1 违例准则 9.9 总结 9.10 练习 第10章 Java IO系统 10.1 输入和输出 10.1.1 InputStream的类型 10.1.2 OutputStream的类型 10.2 增添属性和有用的接口 10.2.1 通过FilterInputStream从InputStream里读入数据 ...

    JAVA_Thinking in Java

    9.8.1 违例准则 9.9 总结 9.10 练习 第10章 Java IO系统 10.1 输入和输出 10.1.1 InputStream的类型 10.1.2 OutputStream的类型 10.2 增添属性和有用的接口 10.2.1 通过FilterInputStream从InputStream里读入数据 ...

    Java初学者入门教学

    9.8.1 违例准则 9.9 总结 9.10 练习 第10章 Java IO系统 10.1 输入和输出 10.1.1 InputStream的类型 10.1.2 OutputStream的类型 10.2 增添属性和有用的接口 10.2.1 通过FilterInputStream从InputStream里读入数据 ...

    ThinkInJava

    9.8.1 违例准则 9.9 总结 9.10 练习 第10章 Java IO系统 10.1 输入和输出 10.1.1 InputStream的类型 10.1.2 OutputStream的类型 10.2 增添属性和有用的接口 10.2.1 通过FilterInputStream从InputStream里读入数据 ...

    java 编程入门思考

    9.8.1 违例准则 9.9 总结 9.10 练习 第10章 Java IO系统 10.1 输入和输出 10.1.1 InputStream的类型 10.1.2 OutputStream的类型 10.2 增添属性和有用的接口 10.2.1 通过FilterInputStream从InputStream里读入数据 ...

    thinkinjava

    9.8.1 违例准则 9.9 总结 9.10 练习 第10章 Java IO系统 10.1 输入和输出 10.1.1 InputStream的类型 10.1.2 OutputStream的类型 10.2 增添属性和有用的接口 10.2.1 通过FilterInputStream从InputStream里读入数据 ...

    Thinking in Java简体中文(全)

    9.8.1 违例准则 9.9 总结 9.10 练习 第10章 Java IO系统 10.1 输入和输出 10.1.1 InputStream的类型 10.1.2 OutputStream的类型 10.2 增添属性和有用的接口 10.2.1 通过FilterInputStream从InputStream里读入数据 ...

    Thinking in Java 中文第四版+习题答案

    9.8.1 违例准则 9.9 总结 9.10 练习 第10章 Java IO系统 10.1 输入和输出 10.1.1 InputStream的类型 10.1.2 OutputStream的类型 10.2 增添属性和有用的接口 10.2.1 通过FilterInputStream从InputStream里读入数据 ...

    JSF开发规范

    - 所有的BackingBean都应继承自BaseBackingBean类。 - 在编写BackingBean时,注意处理好生命周期事件,例如初始化和销毁等。 #### 5. JSP编码规范 ##### 5.1 文件命名规范 - JSP文件的命名应具有描述性,能够清晰...

    2021-2022计算机二级等级考试试题及答案No.11734.docx

    - **题目解析**:题目询问了如何在JSP中创建一个名为`TheBean`的类的新实例,并将其存储在请求作用域中。在JSP中,可以使用特定的动作标签来创建JavaBean实例,并将其存储在不同的作用域中。 - **知识点详解**: -...

    软件工程术语表

    BeanInfo是Java Bean的元数据类,提供了关于Bean的属性、事件和方法的信息。BeanInfo类用于实现自省,支持可视化工具和框架的自动配置。 #### 行为(Behavior) 在软件工程中,行为是指系统或对象对外部刺激的响应...

    2021-2022计算机二级等级考试试题及答案No.2824.docx

    4. **Java Bean属性设置**:在Java中,设置Bean属性值通常使用setter方法,错误的设置方式可能是没有遵循Java Bean规范,例如方法名不正确,或者参数类型、个数不匹配。 5. **Python函数参数**:在Python中,`*args...

    SpringMVC源码剖析(二)- DispatcherServlet的前世今生1

    Spring MVC遵循开放封闭原则(Open-Closed Principle,OCP),该原则是面向对象设计的基本准则之一。在Spring官方文档中,Spring MVC被明确设计成遵循这一原则。在DispatcherServlet的源码中,这一点体现为两点: ...

Global site tag (gtag.js) - Google Analytics