文章目录
- JavaBean的定义
- JavaBean的任务
- JavaBean的组成
- JavaBean代码示例
JavaBean的定义
JavaBean是一种Java语言写成的可重用组件。为写成JavaBean,类必须是具体的和公共的,并且具有无参数的构造器。JavaBean 通过提供符合一致性设计模式的公共方法将内部域暴露成员属性,set和get方法获取。众所周知,属性名称符合这种模式,其他Java 类可以通过自省机制(反射机制)发现和操作这些JavaBean 的属性。
所谓javaBean,是指符合如下标准的Java类:
- 类是公共的
- 有一个无参的公共的构造器
- 有属性,且有对应的get、set方法
用户可以使用JavaBean将功能、处理、值、数据库访问和其他任何可以用Java代码创造的对象进行打包,并且其他的开发者可以通过内部的JSP页面、Servlet、 其他JavaBean、applet程序或者应用来使用这些对象。用户可以认为JavaBean提供了一种随时随地的复制和粘贴的功能,而不用关心任何改变。
JavaBean的任务
JavaBean的任务就是: “Write once, run anywhere, reuse everywhere”,即"一次性编写,任何地方执行,任何地方重用”。这个任何实际上就是要解决困扰软件工业的日益增加的复杂性,提供一个简单的、紧凑的和优秀的问题解决方案。
JavaBean的组成
(1)属性(properties)
JavaBean提供了高层次的属性概念,属性在JavaBean中不只是传统的面向对象的概念里的属性,它同时还得到了属性读取和属性写入的API的支持。属性值可以通过调用适当的bean方法进行。比如,可能bean有一个名字属性,这个属性的值可能需要调用String getName()方法读取,而写入属性值可能要需要调用void setName(String str)的方法。
每个JavaBean属性通常都应该遵循简单的方法命名规则,这样应用程序构造器工具和最终用户才能找到JavaBean提供的属性,然后查询或修改属性值,对bean进行操作。JavaBean还可以对属性值的改变作出及时的反应。比如一个显示当前时间的JavaBean,如果改变时钟的时区属性,则时钟会立即重画,显示当前指定时区的时间。
(2) 方法(method)
JavaBean中的方法就是通常的Java方法,它可以从其他组件或在脚本环境中调用。默认情况下,所有bean的公有方法都可以被外部调用,但bean一般只会引出其公有方法的一个子集。由于JavaBean本身是Java对象,调用这个对象的方法是与其交互作用的唯一途径。JavaBean严格遵守面向对象的类设计逻辑,不让外部世界访问其任何字段(没有public字段)。这样,方法调用是接触Bean的唯一途径。
但是和普通类不同的是,对有些Bean来说,采用调用实例方法的低级机制并不是操作和使用Bean的主要途径。公开Bean方法在Bean操作中降为辅助地位,因为两个高级Bean特性–属性和事件是与Bean交互作用的更好方式。因此Bean可以提供要让客户使用的public方法,但应当认识到,Bean设计人员希望看到绝大部分Bean的功能反映在属性和事件中,而不是在人工调用和各个方法中。
(3) 事件(event)
Bean与其他软件组件交流信息的主要方式是发送和接受事件。我们可以将bean的事件支持功能看作是集成电路中的输入输出引脚:工程师将引脚连接在一起组成系统,让组件进行通讯。有些引脚用于输入,有些引脚用于输出,相当于事件模型中的发送事件和接收事件。
事件为JavaBean组件提供了一种发送通知给其他组件的方法。在AWT事件模型中,一个事件源可以注册事件监听器对象。当事件源检测到发生了某种事件时,它将调用事件监听器对象中的一个适当的事件处理方法来处理这个事件。由此可见,JavaBean确实也是普通的Java对象,只不过它遵循了一些特别的约定而已。
JavaBean代码示例
Phone类
public class Phone {
private String Phonetype;//手机型号
private String CPUType;//处理器型号
private String displayType;//显示屏型号
private String CameraConfiguration;//相机配置
//无参构造
public Phone() {
super();
}
//有参构造
public Phone(String phonetype, String cPUType, String displayType, String cameraConfiguration) {
super();
Phonetype = phonetype;
CPUType = cPUType;
this.displayType = displayType;
CameraConfiguration = cameraConfiguration;
}
public String getPhonetype() {
return Phonetype;
}
public void setPhonetype(String phonetype) {
Phonetype = phonetype;
}
public String getCPUType() {
return CPUType;
}
public void setCPUType(String cPUType) {
CPUType = cPUType;
}
public String getDisplayType() {
return displayType;
}
public void setDisplayType(String displayType) {
this.displayType = displayType;
}
public String getCameraConfiguration() {
return CameraConfiguration;
}
public void setCameraConfiguration(String cameraConfiguration) {
CameraConfiguration = cameraConfiguration;
}
}
public String showPhoneInfo() {
return
"手机类型: " + Phonetype + "\n"+
"CPU类型:" + CPUType + "\n"+
"显示屏类型:" + displayType+ "\n"+
"相机参数:" + CameraConfiguration + "\n";
}
Test类
public class Test {
public static void main(String[] args) {
Phone myPhone =new Phone();
myPhone.setCPUType("膏通削龙8根1");
myPhone.setDisplayType("8K显示");
myPhone.setPhonetype("华米18 Pro plus ultra 至尊至臻纪念大师探索轻薄折叠屏青春版");
myPhone.setCameraConfiguration("前置108MP+后置8摄GN2_208MP+夜宵算法");
System.out.println(myPhone.showPhoneInfo());
}
}
运行结果: