JavaBean组件

初始JavaBean

JavaBean是Java开发语言中一个可以重复使用的软件组件,它本质上就是一个Java类。

一个标准的JavaBean组件需要遵循一定的编码规范,具体如下:
  (1)它必须具有一个公共的、无参的构造方法,这个方法可以是编译器自动产生的缺省构造方法。
  (2)它提供公共的setter方法和getter方法让外部程序设置和获 取JavaBean的属性。

JavaBean其实本质上就是一个封装了一系列属性和方法的类。

访问JavaBean的属性

类的属性指的是类的成员变量。在JavaBean中同样也有属性,但是它和成员变量不是一个概念。
JavaBean中的属性是以方法定义的形式出现的,这些方法必须遵循一定的命名规范。

例如在JavaBean中包含一个String类型的属性name,那么在JavaBean中必须至少包含getName()和setName方法中的一个,这两个方法的声明如下所示:
    public String getName();
    public void setName(String name);

如果一个属性只有getter方法,则该属性为只读属性,如果一个属性只有setter方法,则该属性为只写属性,如果一个属性既有getter方法,又有setter方法,则该属性为读写属性。
通常来说,在开发JavaBean时,其属性都定义为读写属性。

需要注意的是,对于JavaBean属性的命名方式有一个例外情况,如果属性的类型为boolean,它的命名方式应该使用is/get而不是set/get。

反射

认识Class类

在Java中允许通过一个实例化对象找到一个类的完整信息,这就是Class类的功能。

Class类表示一个类的本身,通过Class可以完整地得到一个类中的结构,包括此类中的方法定义、属性定义等等。

在Class类中本身没有定义任何非私有的构造方法 ,因此我们不能通过new直接创建Class类的实例。获得Class类的实例有三种方式,具体如下:  
(1)通过“对象.getClass()”方式获取该对象的Class实例
(2)通过Class类的静态方法forName(),用类的全路径名获取一个Class实例
(3)通过“类名.class”的方式来获取Class实例,对于基本数据类型的封装类,还可以采用.TYPE来获取相对应的基本数据类型的Class实例

通过反射创建对象

通过反射创建对象的方式有两种,即调用有参和无参构造方法

1、通过无参构造实例化对象
如果想通过Class类本身实例化其他类的对象,那么就可以使用newInstance()方法,但是必须要保证被实例化的类中存在一个无参构造方法。

2、通过有参构造实例化对象
当通过有参构造方法实例化对象时,需要分为三个步骤完成,具体如下:
(1)通过Class类的getConstructors()方法取得本类中的全部构造
             方法。
(2)向构造方法中传递一个对象数组进去,里面包含了构造方法中
             所需的各个参数。
(3)通过Constructor类实例化对象。

通过反射访问属性

在反射机制中,属性的操作是通过Filed类实现的,它提供的set()和get()方法分别用于设置和获取属性。
需要注意的是,如果访问的属性是私有的,则需要在使用set()或get()方法前,使用Field类中的setAccessible(true)方法将需要操作的属性设置成可以可被外界访问的。

通过反射调用方法

当获得某个类对应的Class对象后,就可以通过Class对象的getMethods()方法或getMethod()方法获取全部方法或指定方法。
在Method里包含一个invoke()方法,该方法的定义具体如下:

public Object invoke(Object obj, Object... args)

内省

什么是内省

JDK中提供了一套 API 用来访问某个属性的getter和setter方法,这就是内省。

内省(Introspector) 是Java 语言对 JavaBean 类属性、事件和方法的一种标准处理方式,它的出现有利于操作对象属性,并且可以有效地减少代码量。

内省访问JavaBean有两种方法,具体如下:
(1)先通过java.beans包下的Introspector类获得JavaBean对象的BeanInfo信息,再通过BeanInfo来获取属性的描述器(PropertyDescriptor),然后通过这个属性描述器就可以获取某个属性对应的 getter和setter方法,最后通过反射机制来调用这些方法。
(2)直接通过java.beans包下的PropertyDescriptor类来操作Bean对象。

修改JavaBean的属性
读取JavaBean的属性
Java的内省也提供了读取JavaBean属性的方法,只要使用PropertyDescriptor类的getReadMethod()方法即可。

JSP标签访问JavaBean

<jsp:useBean>标签


<jsp:useBean>标签用于在某个指定的域范围(pageContext、request、session、application等)中查找一个指定名称的JavaBean对象,如果存在则直接返回该JavaBean对象的引用,如果不存在则实例化一个新的JavaBean对象并将它按指定的名称存储在指定的域范围中。

用来在JSP页面中获取或创建一个JavaBean组件的实例并指定它的名字和作用范围。

四种使用方式:
1、单独使用class属性
2、单独使用type属性
3、class属性和type属性结合使用
4、beanName属性和type属性的结合使用
<jsp:useBean id="name" scope="page|request|session|application" class="className" />
id属性
在定义范围内确认JavaBean实例变量,也可以用该变量名引用JavaBean实例
class属性
引用的JavaBean的完整类名。JSP2.0规范要求JavaBean必须要有包名
scope属性
JavaBean存在范围及id变量名有效范围。翻飞由小到大依次为:page、request、session和application。默认为page

<jsp:getProPerty>标签


用来获取JavaBean中指定的属性值并将其转化为一个字符串,然后将其输出到页面中。即其作用相当于前面提到的getXXX()方法。
语法:
    <jsp:getProperty name="beanInstanceName" property="PropertyName" />
name用于指定JavaBean实例对象的名称,其值应该和<jsp:useBean>标签的id属性值相同
property:用于指定JavaBean实例对象的属性名
在使用<jsp:getProperty>标签时,它的name属性和property属性都必须设置,不能省略。

在使用<jsp:getProperty>动作指令之前,必须使用<jsp:useBean>动作指令来获取或者创建JavaBean实例

<jsp:setProperty>标签


想为JavaBean对象设置属性,可以通过<jsp:setProperty>标签来实现。
用来设置已经实例化的JavaBean对象的属性值。实际上,该动作指令作用即相当于获取属性值的setXXX()方法。

有3种不同的语法形式
1.通过表达式或字符串常量设置属性
    <jsp:setProperty name="beanname" property="propertyName" value="<%=expression%>|字符串" />
2.通过内置对象request传递的参数值设置属性
直接使用表达式或字符串常量设置值的情况很少,往往都是通过接收用户请求中传递的参数值来设置JavaBean属性的
    <jsp:setProperty name="beanname" property="propertyName" param="paramName" />
3.通过表单的提交参数设置属性
    <jsp:setProperty name="beanname" property="propertyName|*">
省略了第二种方式中的param属性。但要求表单中参数名字必须与JavaBean中的名字一致。

BeanUtils工具

什么是BeanUtils

Java语言提供了反射和内省的API,但是这些API相当复杂且操作非常的繁琐。为此,Apache软件基金会提供了一套简单、易用的API——BeanUtils工具。

需要注意的是,BeanUtils工具包还需要一个logging包来配合使用,logging包中包装了各种日志API的实现。

Java精选笔记_JavaBean的更多相关文章

  1. Java精选笔记_国际化

    国际化 什么是国际化 指软件在开发时就应该具备支持多种语言和地区的功能,当应对不同国家和地区的用户访问,针对不同国家和地区的用户,提供相应的.符合来访者阅读习惯的页面和数据. 由于国际化interna ...

  2. Java精选笔记_自定义标签

    自定义标签 自定义标签入门 什么是自定义标签 自定义标签可以有效地将HTML代码与Java代码分离,从而使不懂Java编程的HTML设计人员也可以编写出功能强大的JSP页面 JSP规范中定义了多个用于 ...

  3. Java精选笔记_JSTL(JSP标准标签库)

    JSTL(JSP标准标签库) JSTL入门 JavaServer Pages Standard Tag Library:JSP标准标签库 在JSP中可以通过Java代码来获取信息,但是过多的Java代 ...

  4. Java精选笔记_EL表达式

    EL表达式 初始EL EL是一种可以简化JSP页面的表达式,EL表达式的语法非常简单都是以"${"符号开始,以"}"符号结束的 EL表达式是一种简单的数据&qu ...

  5. Java精选笔记_文件上传与下载

    文件上传与下载 如何实现文件上传 在Web应用中,由于大多数文件的上传都是通过表单的形式提交给服务器的,因此,要想在程序中实现文件上传的功能,首先得创建一个用于提交上传文件的表单页面. 为了使Serv ...

  6. Java精选笔记_Servlet事件监听器

    Servlet事件监听器 概述 在程序开发中,经常需要对某些事件进行监听,如监听鼠标点击事件.监听键盘按下事件等,此时就需要使用事件监听器. 事件监听器用于对程序中发生的事件进行监听,在监听的过程中会 ...

  7. Java精选笔记_DBUtils工具

    DBUtils工具 API介绍 为了更加简单地使用JDBC,Apache组织提供了一个工具类库commons-dbutils组件. 该组件实现了对JDBC的简单封装,可以在不影响性能的情况下极大简化J ...

  8. Java精选笔记_JDBC

    JDBC 概述 什么是JDBC JDBC全称是Java数据库连接(Java Database Connectivity),应用程序可通过这套API连接到关系数据库,并使用SQL语句来完成对数据库中数据 ...

  9. Java精选笔记_Tomcat开发Web站点

    Tomcat开发Web站点 Web开发的相关知识 B/S架构和C/S架构 C/S架构是Client/Server的简写,也就是客户机/服务器端的交互.常见应用 : QQ. 迅雷. 360. 旺旺等 B ...

随机推荐

  1. Django——model基础

      ORM 映射关系: 表名 <-------> 类名 字段 <-------> 属性 表记录 <------->类实例对象 创建表(建立模型) 实例:我们来假定下 ...

  2. How to add elements to a List in Scala

    Scala List FAQ: How do I add elements to a Scala List? This is actually a trick question, because yo ...

  3. code标签和pre标签的定义

    前些日子一同事问了我一个关于code标签和pre标签的问题,嗯,是的,这两个标签凑到一块,便出现了问题.于是总结了一下.此文就重点谈一下code标签和pre标签喽,谈谈他们的定义,区别,应用以及这两个 ...

  4. .Net应该学什么怎么学(四)

    八.ASP.Net    ASP.Net是.Net中用来开发动态Web应用程序的技术,ASP.Net主要分ASP.Net WebForm(以后简称WebForm)和ASP.Net MVC两种技术,大部 ...

  5. iosttableViewCell右侧的箭头,圆形等

    cell.accessoryType = UITableViewCellAccessoryNone;//cell没有任何的样式 cell.accessoryType = UITableViewCell ...

  6. 【C#】AddHandler可重复多次添加事件处理器的问题

    问题:在项目中发现,可以重复多次添加同一个Handler,导致触发时执行多次的问题. 这个现象也很好测试: 前台准备一个Label文本 <Label x:Name="label&quo ...

  7. GNU make学习笔记

    第五章:规则的命令 5.1 命令的回显 make在执行命令之前会把要执行的命令输出到标准输出设备,称之为"回显". 如果规则的命令以字符"@"开始,则make在 ...

  8. linux下tree命令详解

    linux下tree命令详解linux下的tree就比较强大了,但一般系统并不自带这个命令,需要手动下载安装:sudo apt-get install tree .文件很小,只有31K,但功能可强大了 ...

  9. link_to和其对应要跳转的的url,用path和直接路由方法

    link_to和其对应要跳转的的url,用path和直接路由方法 看看link_to <% @order.each do |oo| %> <div> <%= oo.nam ...

  10. 有趣的 Mysql 存储引擎

    Mysql 提供了一套统一的应用开发模型和核心 API,因此,尽管不同的存储引擎拥有不同的特性,不过对于开发人员,应用操作都是完全透明的.应用层的连接并不直接访问存储引擎层,而是访问 Mysql 提供 ...