// Person.java
public class Person{
private String name;
private int age; // 无参构造函数
public Person(){
super();
} // 有参构造函数
public Person(String name, int age){
super();
this.name = name;
this.age = age;
} 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;
} public int getId(){
return "dfkdklfjk";
} public String toString(){
return "Person [name="+name+",age="+age+"]";
}
}
  1. JavaBean 是特殊的 Java 类, 位于 JavaSE 中的 java.beans 包中;

  2. JavaBean 规范:

    • 必须要有一个默认的无参构造函数;
    • 提供 get/set 方法, 如果只有 get 方法, 那么这个属性是只读属性;
    • 需要被序列化并且实现了 Serializable 接口;
    • 一般对于具有 get/set 方法的成员变量称之为属性. 其实就算一个属性没有对应的成员变量,

      只有 get/set 方法也是可以的. 该属性的名称就是 get/set 方法去除 get/set 后,再把首字母小写.

      例如, 上面代码中的 "id" 属性.
    • boolean 类型的属性, 它的读方法可以是 "is" 开头, 也可以是 "get" 开头;
  3. 内省

    • 内省的目标是得到 JavaBean 属性的读, 写方法的反射对象, 通过反射对 JavaBean 属性进行操作的一组 API.

      例如 Person 类有名为 name 的 JavaBean 属性, 通过两个 Method 对象(一个是 getName(), 一个是 setName()),

      来操作 Person 对象.
// 得到 BeanInfo, BeanInfo 是一个 JavaBean 类型的信息类
BeanInfo info = Introspector.getBeanInfo(Person.class); // 得到属性描述符对象
PropertyDiscriptor[] discriptors = info.getPropertyDiscriptor(); // 通过 getReadMethod() 或 getWriteMethod() 得到一个属性的读或写方法 // 通过 读/写 方法来操作 JavaBean 属性
  1. commons-beanutils 工具类是依赖内省完成的!
  • 导包:

    • commons-beanutils.jar
    • commons-logging.jar
// 示例
// 第一种方式:
public void fun1(){
String className = "cn.itcast.domain.Person";
Class clazz = Class.forName(className);
Object bean = clazz.newInstance(); // 使用 BeanUtils 给 bean 的各个属性赋值
BeanUtils.setProperty(bean,"name","张三");
BeanUtils.setProperty(bean,"age","25"); // 获取 bean 中属性的值, 返回 String 类型的值
String age = BeanUtils.getProperty(bean,"age"); System.out.println(bean);
} // 第二种方式: 把 map 中的属性直接封装到一个 bean 中
// Map: {"name":"张三", "age":"25"}
// 要求: map 中的 key 与 bean 的属性名相同!!
// 如果 Map:{"name":"李四"}, Person 的值为 Person [name=李四,age=null]; public void fun2(){ Map<String,String> map = new HashMap<String,String>();
map.put("name","张三");
map.put("age","25"); Person person = new Person();
BeanUtils.populate(person,map); // 此时, person 对象就是 (张三,25);
}

2. jsp 中与 javabean 相关标签

// 示例:
<jsp:useBean> : 创建或查询 bean
// 在 session 域中查找名为 user2 的 bean, 如果不存在, 就创建
<jsp:useBean id="user2" class="cn.itcast.domain.User" scope="session" /> // 语法格式:
<jsp:useBean id="自定义id" class="bean 编译的类" scope="bean 作用域">
<jsp:setProperty name="bean 的 id" property="属性名" value="值"/> <jsp:getProperty name="bean 的 id" property="属性名"/>
......
</jsp:useBean> // 示例: a.jsp
<body>
<jsp:useBean id="person" class="cn.itcast.domain.Person">
<jsp:setProperty name="person" property="name" value="张三"/>
<jsp:setProperty name="person" property="age" value="25"/> </jsp:useBean> <p>姓名:
<jsp:getProperty name="person" property="name"/>
</p>
<p>年龄:
<jsp:getProperty name="person" property="age"/>
</p>
</body> // 访问 a.jsp, 运行结果:
姓名:张三
年龄:25

参考资料:

JavaBean 介绍的更多相关文章

  1. Javabean介绍

    1.javabean简介 JavaBean 是一种JAVA语言写成的可重用组件.为写成JavaBean,类必须是具体的和公共的,并且具有无参数的构造器.JavaBean 通过提供符合一致性设计模式的公 ...

  2. JavaBean出现的目的

    一.JavaBean出现的目的 由于只用JSP开发会发现使用了很多的Scriptlet,会使得jsp文件非常混乱.如果使用了JavaBean,则可以大大减少JSP中代码量. JSP的理想状态是只负责显 ...

  3. 几种封装javaBean的方法

    开发框架时,经常需要使用java对象(javaBean)的属性来封装程序的数据,封装javaBean的方法有很多,比如反射,内省,以及使用工具类.下面从反射开始介绍. 1.javaBean介绍: 简介 ...

  4. JavaBean内省与BeanInfo

    Java的BeanInfo在工作中并不怎么用到,我也是在学习spring源码的时候,发现SpringBoot启动时候会设置一个属叫"spring.beaninfo.ignore", ...

  5. Hibernate的初步

    1.简介 在java开发领域,基于数据库应用的设计与实现一直都是面向关系的,Hibernate对象/关系映射ORM框架的出现为java面向对象开发提供了易于使用的数据持久化解决方案. ORM介绍: ( ...

  6. JSP---JavaBean的使用-jsp:useBean标签相关

    JavaBean介绍: JavaBean其实就是一个遵循特定写法的java类,但是必须具有如下特点: 1.这个java类必须具有一个公开的无参构造函数 2.属性必须私有化,类必须公开 3.私有化的属性 ...

  7. 第13天 JSTL标签、MVC设计模式、BeanUtils工具类

    第13天 JSTL标签.MVC设计模式.BeanUtils工具类 目录 1.    JSTL的核心标签库使用必须会使用    1 1.1.    c:if标签    1 1.2.    c:choos ...

  8. Java Web 从入门到精通(明日科技)

    目录结构: 第一章:Java Web 应用开发概述 第二章:html与css网页开发基础 第三章:JavaScript脚本语言 第四章:搭建开发环境 第五章:JSP语言基础 第六章:JSP内置对象 第 ...

  9. JavaWeb学习笔记(十一)—— JavaWeb开发模式【转】

    SUN公司推出JSP技术后,同时也推荐了两种web应用程序的开发模式,一种是JSP+JavaBean模式,一种是Servlet+JSP+JavaBean模式. 一.JSP+JavaBean开发模式 1 ...

随机推荐

  1. Hibernate一级缓存和二级缓存具体解释

    一.一级缓存二级缓存的概念解释 (1)一级缓存就是Session级别的缓存,一个Session做了一个查询操作,它会把这个操作的结果放在一级缓存中.假设短时间内这个 session(一定要同一个ses ...

  2. atitit.php中的dwr 设计模式

    atitit.php中的dwr 设计模式 1. dwr的优点相对于ajax来说.. 1 2. DWR工作原理 1 3. php的dwr实现 1 4. 参考 3 1. dwr的优点相对于ajax来说.. ...

  3. atitit。html css框架Bootstrap  Foundation的比较与不同 attilax大总结

    atitit.html css框架Bootstrap  Foundation的比较与不同 attilax大总结 1. Bootstrap  Foundation的比较与不同1 2. Bootstrap ...

  4. [k8s]kubectl windows配置(kubernetic) && kubectl config set-context使用Kubernetic

    参考: https://feisky.gitbooks.io/kubernetes/components/kubectl.html https://kubernetes.io/docs/tasks/t ...

  5. poj 1475 Pushing Boxes 推箱子(双bfs)

    题目链接:http://poj.org/problem?id=1475 一组测试数据: 7 3 ### .T. .S. #B# ... ... ... 结果: //解题思路:先判断盒子的四周是不是有空 ...

  6. 浅谈HTTPS协议和SSL、TLS之间的区别与关系

    HTTP可能是我们见到过最多的一个字符串了,应该没有之一,而对于HTTPS到来和趋势,我们又开始看到SSL/TLS,所以对于一般不只做技术的人来说这或许还是一个疑问,那么子凡就趁最近在折腾这方面来给大 ...

  7. CSS学习笔记(1)--浮动

    总结:浮动只能在脱离文档流的当前位置向上浮动,不能像定位一样到处乱跑. 清除浮动,设置一个类.clear{clear:both;} 1.没有浮动,都独占一行: <!DOCTYPE html> ...

  8. 一图总结C++中关于指针的那些事

    指向对象的指针.指向数据成员的指针,指向成员函数的指针: 数组即指针,数组的指针,指针数组: 指向函数的指针,指向类的成员函数的指针,指针作为函数參数,指针函数: 指针的指针,指向数组的指针:常指针. ...

  9. 使用WinSCP这个软件使linux和win7互传文件

    使用这个软件之前首先win7要可以ping通linux系统,且linux要开启,关机可不能通啊!!!!!!!!! 双击这个快捷方式 主机名写ip地址 我们可以将虚拟机上的文件下载下来进行使用 也可以将 ...

  10. linux TZ格式

    man tzset可以很清楚了解时区设置格式,共3种: The first format is used when there is no daylight saving time in the lo ...