ITEEDU

JSP/Servlet: JavaBean 的多型(Polymorphic)

如果您为您的JavaBean定义了一个抽象类别,并让所有的JavaBean实作该抽象类别,则在使用<jsp:useBean>时,可以使用type属性来指定抽象型态,而使用class属性来指定实际的实作类别。

举例来说,假设您定义了一个Person抽象类别:

Person.java
package onlyfun.caterpillar;

public abstract class Person {
private String name;

public void setName(String name) {
this.name = name;
}

public String getName() {
return name;
}
} 

然后您有定义一个Student类别实作了Person类别:

Student.java
package onlyfun.caterpillar;

public class Student extends Person {
private int number;

public void setNumber(int number) {
this.number = number;
}

public int getNumber() {
return number;
}
} 

在使用<jsp:useBean>时,使用type来指定抽象型态,例如:

<jsp:useBean id="person" type="onlyfun.caterpillar.Person" class="onlyfun.caterpillar.Student"/>

则实际上在转译为Servlet时,就会产生如下的程序代码:

...
onlyfun.caterpillar.Person person = null;
if(person == null)
person = new onlyfun.caterpillar.Student();.

type属性的设定可以是一个抽象类别,也可以是一个接口,如果您只设定type而没有设定class,则您必须确定在某个范围中已经存在您所要的Bean对象,否则会发生InstantiationException例外。