一、JavaBean简介
javaBean是一种特殊的Java类,以封装和重用为目的,在类的设计上遵从一定的规范,以供其他组件根据这种规范来调用。
javaBean最大的优势在于重用,同时它又具有以下特性:
1.易于维护、使用、编写
2.封装了复杂的业务逻辑
3.可移植性
4.便于传输,即可用于本地也可用于网络传输
JavaBean可分为两种:一种是有用户界面(User Interface,UI)的JavaBean,例如一些GUI组件(按钮、文本框和报表组件等);另一种是没有用户界面,主要负责封装数据、业务处理的JavaBean。JSP通常访问的是最后一种JavaBean。
JSP与Javabean搭配使用,具有以下优势:
1.jsp页面中的html代码与java代码分离,便于页面设计人员和java编程人员的分工和维护。
2.使jsp更加侧重于生成动态网页,事务处理由JavaBean来完成,使系统更趋于组件化、模块化。
javabean的优势,使系统具有更好的健壮性和灵活性,使得jsp+servlet+javabean的组合设计模式成为目前开发Java Web应用的主流模式。
二、javabean规范
1.javabean是一个公开(public)的类,以便被外部程序访问。
2.具有一个无参的构造方法(即一般类中默认的构造方法),以便被外部程序实例化时调用。
3.提供setXxx()和getXxx()方法,以便让外部程序设置和获取其属性。
凡是符合上述规范的java类,都可以被称为javabean。
javabean中的setXxx()和getXxx()方法也被称为setter方法和getter方法,是针对javabean方法的一种命名方式。方法的名称由字符set+属性名和get+属性名构成,属性名是将javabean的属性名称首字母大写后得来。例如,名称为useName的JavaBean属性,对应的setter方法和getter方法为:setUserName()和getUserName()。
JavaBean通过这种方法的命名规范以及对类的访问权限和构造函数的要求,使得外部程序能够通过反射机制来实例化JavaBean和查找到这些方法,从而调用这些方法来设置和获取javabean对象的属性。
示例:一个普通的javabean
package com.rjxy;
import java.util.Date;
public class DemoBean{
private String userName;
private int age;
private Date birthday;
private boolean married;
private String[]hobby;
public String getUserName(){
return userName;
}
public void setUserName(String username){
this.userName=userName;
}
public int getAge(){
return age;
}
public void setAge(int age){
this.age=age;
}
public Date getBirthday(){
return birthday;
}
public void setBirthday(Date birthday){
this.birthday=birthday;
}
public boolean isMarried(){
return married;
}
public void setMarried(boolean married){
this.married=married;
}
public String[] getHobby(){
return hobby;
}
public void setHobby(String[] hobby){
this.hobby=hobby;
}
}
上述示例中,类DemoBean为一个公有类,有一个默认的无参构造方法,同时有5对setter和getter方法,通过这三个条件,类DemoBean即为一个JavaBean。在此javabean中,5对setter和getter方法分别与5个属性相对应,setter方法通过形参来设置属性值,getter方法通过返回值来获取属性值。需注意的是,对于boolean类型的属性,可以使用get开头,但在开发时习惯以is开头,在这里推荐使用is开头。
在javabean中,对于属性的定义也不同于普通类中的属性定义。javabean中的属性是指setter和getter方法名中所包含的属性名,即使在javabean类中没有定义此名称的实例变量,也可称为javabean的属性。这种定义方式扩展了属性的定义,融入了对javabean所封装的业务功能的表示。例如,下述一个用来封装商品价格计算的javabean。
public class ProductBean{
//商品单价
private float price;
//商品数量
private int num;
public float getPrice(){
return price;
}
public void setPrice(float price){
this.price=price;
}
public int getNum(){
return num;
}
public void setNum(int num){
this.num=num;
}
//获取商品总价
public double getTotalPrice(){
return this.price*this.num;
}
}
上述示例中,单价和数量表示商品类的属性,属性值的设置和获取由setter和getter方法完成,此处price和num既作为类的属性又作为javabean属性,而对于计算商品总价格这一业务功能,通过getter方法进行了业务封装,方便外部程序的调用和重用,而此时业务功能产生的结果:总价格(TotalPrice),更多的表现为一种业务的临时结果,并不需要作为类的属性进行定义,但可作为javabean属性表现业务功能。