您的位置:首页 > 编程语言 > Java开发

JavaBean

2015-06-26 11:54 495 查看
**1、JavaBean概述
1.1、什么是JavaBean
JavaBean是一种规范,也就是对类的要求。它要求java类的成员变量提供getter/setter方法,
这样的成员变量被称之为JavaBean属性
JavaBean还要求类必须提供仅有的无参构造器。
1.2、JavaBean属性
JavaBean属性是具有getter/setter方法的成员变量
*也可以只提供getter方法,这样的属性叫只读属性
*也可以只提供setter方法,这样的属性叫只写属性
*如果属性类型为boolean类型,那么读方法的格式可以是get或is。例如:
名为abc的boolean类型的属性,它的读方法可以是getAbc(),或是isAbc().

>JavaBean 可能存在属性,但不存在这个成员变量

**2、内省
内省的目标是得到JavaBean属性的读,写方法的反射对象,通过反射对JavaBean的属性进行操作
的一组API。
2.1、内省之获取BeanInfo
通过java.beans.Introspector的getBeanInfo()方法来获取java.beans.BeanInfo实例:
BeanInfo beanInfo = Introspector.getBeanInfo(User.class);
2.2、得到所有属性描述符(PropertyDescriptor)
通过BeanInfo可以得到这个类的所有JavaBean属性的PropertyDescriptor对象。然后就可以
通过PropertyDescriptor对象得到这个属性的getter/setter方法的Method对象了。
PropertyDescriptor[] pds = beanInfo.getPropertyDescriptors();

>每个PropertyDescriptor对象对应一个JavaBean属性
* String getName():获取JavaBean属性名称
* Method getReadMethod():获取属性的读方法
* Method getWriterMethod():获取属性的写方法

2.3、完成Map数据封装到User对象中
public void fun() throws Exception{
Map<String,String> map = new HashMap<String,String>();
map.put("username","admin");
map.put("password","admin123");

BeanInfo beanInfo = IntroSpector.getBeanInfo(User.class);

PropertyDescriptor[] dps = beanInfo.getPropertyDesciptors();

User user = new User();
for(PropertyDescriptor pd : pds){
String name = pd.getName();
String value = map.get(name);
if(value != null){
Method writeMethod = pd.getWriteMethod();
writeMethod.invoke(user,value);
}
}
}

**3、commons-beanutils工具
它底层使用了内省,对内省进行了简化.
>使用beanuitls需要的jar包
*commons-beanutils.jar
*commons-logging.jar

3.1、设置JavaBean属性
User user = new User();
BeanUtils.setProperty(user,"username","admin");
BeanUtils.setProperty(user,"password","admin123");

3.2、获取JavaBean属性
User user = new User("admin","admin123");
String username = BeanUtils.getProperty(user,"username");
String password = BeanUtils.getProperty(user,"password");

3.4、封装Map数据到JavaB对象中
Map<String,String> map = new HashMap<String,String>();
map.put("username","admin");
map.put("password","admin123");

User user = new User();

BeanUtils.populate(user,map);

**4、JSP与JavaBean相关的动作标签
在JSP中,与JavaBean相关的标签有:
* <jsp:userBean>:创建JavaBean对象
* <jsp:setProperty>:设置JavaBean属性
* <jsp:getProperty>:获取JavaBean属性

>先建一个JavaBean类:
public class User {
private String username;
private String password;

public User(String username, String password) {
this.username = username;
this.password = password;
}
public User() {
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String toString() {
return "User [username=" + username + ", password=" + password + "]";
}
}

4.1、<jsp:useBean>
<jsp:useBean>标签的作用是创建JavaBean对象
* 在当前JSP页面创建JavaBean对象
* 把创建的JavaBean对象保存到域对象中
<jsp:useBean id = "user1" class="cn.domain.Uesr"/>
上述代码表示在当前jsp页面中创建User类型的对象,并且把它保存到page域中了。
等同于如下代码:
<%
cn.domain.User user1 = new cn.doamian.User();
pageContext.setAttribute("user1",user1);
%>

<jsp:useBean>标签默认是把JavaBean对象保存到page域,还可以通过scope标签属性来
指定保存的范围。
<jsp:useBean id = "user1" class="cn.domain.User" scope="page"/>
<jsp:useBean id = "user2" class="cn.domain.User" scope="request"/>
<jsp:useBean id = "user3" class="cn.domain.User" scope="response"/>
<jsp:useBean id = "user4" class="cn.domain.User" scope="application"/>

<jsp:useBean>标签其实不一定会创建对象!!!其实它会先在指定范围中查找这个对象,
如果对象不存在才会创建,我们需要重新对它进行翻译:
<jsp:useBean id="user4" class="cn.domain.User" scope="applicatioin"/>
<%
cn.domain.User user4 = (cn.domain.User)application.getAttribute("user4");
if(user4 == null){
user4 = new cn.domain.User();
application.setAttribute("user4",user4);
}
%>

4.2、<jsp:setProperty> 和 <jsp:getProperty>
<jsp:setProperty>标签的作用是给JavaBean设置属性值,而<jsp:getProperty>是用来
获取属性值。在使用它们之前要先创建JavaBean.
<jsp:useBean id="user1" class="cn.domain.User" />
<jsp:setProperty property="username" name="user1" value="admin" />
<jsp:setProperty property="password" name="user1" value="admin123" />

用户名:<jsp:getProperty property="username" name="user1" /><br/>
密 码:<jsp:getProperty property="password" name="user1" /><br/>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: