编写Javabean和使用Jababean
JavaBean是一种Java语言编写的可重用组件,通常用于表示数据模型。它是一种符合JavaBean规范的Java类,具有以下特点:
- 具有无参构造方法;
- 属性具有getter和setter方法;
- 实现了Serializable接口,可以进行序列化和反序列化;
- 可以通过BeanInfo类来描述JavaBean的属性、方法和事件。
编写Javabean
编写Javabean就是编写一个Java的类,所以只要会写类就能编写一个Javabean。这个类创建的一个对象称为一个Javabean,简称bean,分配给bean的变量(成员变量),也称bean的属性。为了能让使用bean的应用程序构建工具(比如Tomcat服务器)使用JSP动作标记知道bean的属性和方法,只须在类的方法命名上遵守以下规则:
(1)如果类的成员变量,也称bean的属性的名字是xxx,那么为了获取或更改bean的属性的值,类中必须提供两个方法:
getXxx(),用来获取属性xxx。
setXxx(),用来修改属性xxx.。
也就是方法的名字用get或set为前缀,后缀是将属性(成员变量)名字的首字母大写的字符序列。
(2)类中定义的方法的访问权限都必须是public的。
(3)类中定义的构造方法必须是public、无参数的。
以下是一个简单的JavaBean示例:
public class Student implements Serializable {
private String name;
private int age;
public Student() {}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
创建与使用bean
使用bean
使用JSP动作标记useBean加载使用bean,语法格式是:
<jsp:useBean id="bean的名字" class="创建bean的类" scope="bean有效范围"/>
或
<jsp:useBean id="bean的名字" class="创建bean的类" scope= "bean有效范围">
</jsp:useBean>
例如:
<jsp:useBean id="circle" class="tom.jiafei.Circle" scope="page" />
需要特别注意的是,其中的“创建bean的类”要带有包名,比如:
class="tom.jiafei.Circle"
bean的加载原理
JavaBean是一种特殊的Java类,可以通过反射机制动态加载和使用。JavaBean的加载原理如下:
JavaBean类的加载:JavaBean类与普通Java类一样,需要先被加载到JVM中。JavaBean类可以通过类加载器(ClassLoader)加载,或者在程序启动时自动加载(例如Servlet容器启动时会自动加载Web应用中的JavaBean类)。
bean的有效范围和生命周期
JavaBean的有效范围和生命周期取决于JavaBean的使用方式和上下文环境。一般来说,JavaBean的有效范围和生命周期可以分为以下几种情况:
1. 单例模式:JavaBean作为单例对象使用时,其有效范围是整个应用程序,生命周期与应用程序相同。JavaBean可以在应用程序启动时创建,一直存在于内存中,直到应用程序结束时被销毁。
2. 请求范围:JavaBean作为请求对象使用时,其有效范围是单个HTTP请求,生命周期与HTTP请求相同。JavaBean可以在每个HTTP请求时创建,用于处理该请求的数据,请求结束时被销毁。
3. 会话范围:JavaBean作为会话对象使用时,其有效范围是整个HTTP会话,生命周期与HTTP会话相同。JavaBean可以在用户登录时创建,一直存在于会话中,直到用户退出或会话超时时被销毁。
4. 应用程序上下文范围:JavaBean作为应用程序上下文对象使用时,其有效范围是整个应用程序,生命周期与应用程序相同。JavaBean可以在应用程序启动时创建,一直存在于应用程序上下文中,直到应用程序结束时被销毁。
5. 其他范围:JavaBean还可以作为其他对象的属性或方法参数使用,其有效范围和生命周期取决于使用该对象的上下文环境。
总之,JavaBean的有效范围和生命周期取决于JavaBean的使用方式和上下文环境。不同的使用方式和上下文环境会对JavaBean的有效范围和生命周期产生不同的影响。在使用JavaBean时,需要根据具体情况选择适当的使用方式和上下文环境。
获取和修改bean的属性
JavaBean的属性可以通过反射机制获取和修改。JavaBean的属性包括私有属性、公有属性、静态属性和非静态属性。获取和修改JavaBean的属性可以分为以下几种情况:
1. 获取和修改公有属性:公有属性可以直接通过JavaBean对象的getter和setter方法获取和修改。例如,假设JavaBean的公有属性为name,可以通过以下代码获取和修改该属性:
// 获取公有属性
String name = javaBean.getName();
// 修改公有属性
javaBean.setName("newName");
2. 获取和修改私有属性:私有属性无法直接访问,需要通过反射机制获取和修改。例如,假设JavaBean的私有属性为age,可以通过以下代码获取和修改该属性:
// 获取私有属性
Field ageField = javaBean.getClass().getDeclaredField("age");
ageField.setAccessible(true);
int age = (int) ageField.get(javaBean);
// 修改私有属性
ageField.set(javaBean, 30);
3. 获取和修改静态属性:静态属性可以通过JavaBean类的静态getter和setter方法获取和修改。例如,假设JavaBean的静态属性为count,可以通过以下代码获取和修改该属性:
// 获取静态属性
int count = JavaBean.getCount();
// 修改静态属性
JavaBean.setCount(10);
4. 获取和修改非静态属性:非静态属性可以通过JavaBean对象的getter和setter方法获取和修改,也可以通过反射机制获取和修改。例如,假设JavaBean的非静态属性为id,可以通过以下代码获取和修改该属性:
// 获取非静态属性(方法一)
int id = javaBean.getId();
// 修改非静态属性(方法一)
javaBean.setId(1);
// 获取非静态属性(方法二)
Field idField = javaBean.getClass().getDeclaredField("id");
idField.setAccessible(true);
int id = (int) idField.get(javaBean);
// 修改非静态属性(方法二)
idField.set(javaBean, 2);
总之,JavaBean的属性可以通过反射机制获取和修改。获取和修改JavaBean的属性需要根据属性的访问权限、静态属性和非静态属性等因素进行选择。在使用JavaBean时,需要根据具体情况选择适当的获取和修改方式。
Bean的辅助类
写一个创建bean的类时,除了需要用import语句引入JDK提供的类,可能还需要自己编写一些其他的类,只要将这样类的包名和bean类的包名一致即可(也可以和创建bean的类写在一个Java源文件中)。