JavaBeans wiki 摘译

news/2024/7/7 7:09:48 标签: java

20161013最新提示:既然来到这了,为什么不看看 JavaBeans 官方文档学习 ?


 

 

鉴于Spring的beans包遵守JavaBean specs,有必要认真研究下JavaBean specs。

先看看wiki上是怎么说的:

定义

Java平台下,JavaBeans是那些将很多object包含进一个单独object的类,这个单独的object就是bean。JavaBeans的特点:serializable、无参构造、setter/getter properties。

优点:

  • bean的properties、events、methods可控。
  • bean可以注册接收其他objects的events;可以生成events发送给其他objects。
  • 可以提供辅助软件来configure一个bean。
  • bean的configuration settings能够被持久化、被还原。

缺点:

  • 无参构造的类被实例化时的状态是无效的。developer可能无法意识到不正常的实例化。
  • JavaBeans都是可修改的,所以不具备不可修改对象的优点。
  • 必须创建很多setter/getter,导致大量呆板的代码。

JavaBeans API

JavaBean的功能是由 java.beans 包 中的类和接口提供的。

接口描述
AppletInitializer用于初始化同时是applets的Beans。
BeanInfo允许设计者详细描述关于一个Bean的events、methods还有properties的信息。
Customizer允许设计者提供GUI,可以configure a bean。
DesignMode决定一个bean是否正在design mode下执行。
ExceptionListener发生异常时,该接口的一个方法会被调用。
PropertyChangeListener当一个bound property被改变时,该接口的一个方法会被调用。
PropertyEditor该接口的实现允许设计者修改和显示property values。
VetoableChangeListener当一个Constrainted property被改变时,该接口的一个方法会被调用。
Visibility该接口中的方法允许bean在GUI不可用的环境下执行。

注:bound property和constrainted property,详见 properties 。

 

JavaBeans conventions (惯例)

  • 类必须有一个public的无参构造。
  • 类的properties必须能通过get/set访问。—boolean properties可以通过is访问。
  • 类必须是serializable。

代码示例:

 1 package player;
 2 
 3 public class PersonBean implements java.io.Serializable {
 4 
 5     /**
 6      * Property <code>name</code> (note capitalization) readable/writable.
 7      */
 8     private String name = null;
 9 
10     private boolean deceased = false;
11 
12     /** No-arg constructor (takes no arguments). */
13     public PersonBean() {
14     }
15 
16     /**
17      * Getter for property <code>name</code>
18      */
19     public String getName() {
20         return name;
21     }
22 
23     /**
24      * Setter for property <code>name</code>.
25      * @param value
26      */
27     public void setName(final String value) {
28         name = value;
29     }
30 
31     /**
32      * Getter for property "deceased"
33      * Different syntax for a boolean field (is vs. get)
34      */
35     public boolean isDeceased() {
36         return deceased;
37     }
38 
39     /**
40      * Setter for property <code>deceased</code>.
41      * @param value
42      */
43     public void setDeceased(final boolean value) {
44         deceased = value;
45     }
46 }
View Code

简单测试:

 1 import player.PersonBean;
 2 
 3 /**
 4  * Class <code>TestPersonBean</code>.
 5  */
 6 public class TestPersonBean {
 7     /**
 8      * Tester method <code>main</code> for class <code>PersonBean</code>.
 9      * @param ARGS
10      */
11     public static void main(String[] args) {
12         PersonBean person = new PersonBean();
13 
14         person.setName("Bob");
15         person.setDeceased(false);
16 
17         // Output: "Bob [alive]"
18         System.out.print(person.getName());
19         System.out.println(person.isDeceased() ? " [deceased]" : " [alive]");
20     }
21 }
View Code

JSP 中的使用:

 1 <% // Use of PersonBean in a JSP. %>
 2 <jsp:useBean id="person" class="player.PersonBean" scope="page"/>
 3 <jsp:setProperty name="person" property="*"/>
 4 
 5 <html>
 6     <body>
 7         Name: <jsp:getProperty name="person" property="name"/><br/>
 8         Deceased? <jsp:getProperty name="person" property="deceased"/><br/>
 9         <br/>
10         <form name="beanTest" method="POST" action="testPersonBean.jsp">
11             Enter a name: <input type="text" name="name" size="50"><br/>
12             Choose an option:
13             <select name="deceased">
14                 <option value="false">Alive</option>
15                 <option value="true">Dead</option>
16             </select>
17             <input type="submit" value="Test the Bean">
18         </form>
19     </body>
20 </html>
View Code

 

参考链接:

  • Oracle's JavaBeans tutorials
  • JavaBeans specification

转载于:https://www.cnblogs.com/larryzeal/p/5954690.html


http://www.niftyadmin.cn/n/1808712.html

相关文章

BOS物流项目笔记(13)

1、学习计划 &#xff08;1&#xff09;Quartz概述 Quartz介绍和下载 入门案例 Quartz执行流程 cron表达式 &#xff08;2&#xff09;在BOS项目中使用Quartz创建定时任务 &#xff08;3&#xff09;在BOS项目中使用JavaMail发送邮件 &#xff08;4&#xff09;HighChar…

android的Fragment详解

Fragment要点 Fragment作为Activity界面的一部分组成出现可以在一个Activity中同时出现多个Fragment&#xff0c;并且&#xff0c;一个Fragment亦可在多个Activity中使用。在Activity运行过程中&#xff0c;可以添加、移除或者替换Fragment&#xff08;add()、remove()、replac…

寻求答案,而不是方案

早上八点按时起床&#xff0c;吃过早餐&#xff0c;去教研室工作。就这样平平常常&#xff0c;也不会觉得痛苦&#xff0c;或是压力太大。 早上骑了自行车&#xff0c;是打算邮寄礼物的。这也算是一次小小的突破&#xff0c;事实上没有我想的那么困难&#xff0c;但每次小小的突…

BOS物流项目笔记(14)

1、学习计划 &#xff08;1&#xff09;Linux部署 安装jdk 安装tomcat 安装MySQL 将项目发布到tomcat &#xff08;2&#xff09;扩展资料 &#xff08;3&#xff09;面试问题总结 2、Linux部署 2.1、安装jdk 第一步&#xff1a;获取Linux系统中jdk安装包 第二步&…

Python练习题 003:完全平方数

【Python练习题 003】一个整数&#xff0c;它加上100后是一个完全平方数&#xff0c;再加上168又是一个完全平方数&#xff0c;请问该数是多少&#xff1f; ------------------------------------------------- 所谓的“完全平方数”&#xff0c;就是开完根号仍然是整数。 数学…

获取flash里的真实url地址,将swf文件下载保存下来

点击下载&#xff1a;UrlActionEditor-v4.04 这个软件可以看到&#xff0c;swf文件里的url。 看图&#xff1a; 看到http://fla.78baby.com/flashupfile/fads/这个地址了吧&#xff0c;这个就是真实的地址&#xff0c;下面我们看看一个具体页面的flash 上面embed标签里的 bofa…

ros launch文件编写和节点启动顺序控制

ROS可以通过launch文件进行节点的管理、初始参数的设置&#xff0c;但是launch文件不能指定节点的启动顺序&#xff0c;因此本文简单介绍下通过launch进行节点启动管理&#xff0c;通过shell来控制节点启动顺序。 1&#xff0c;我将读取参数的代码片段放在了ros::init(argc,arg…

struts2Springhibernate原理

1、Structs2 Struts2是一个基于MVC设计模式的Web应用框架&#xff0c;它本质上相当于一个servlet&#xff0c;在MVC设计模式中&#xff0c;Struts2作为控制器(Controller)来建立模型与视图的数据交互。Struts 2是Struts的下一代产品&#xff0c;是在 struts 1和WebWork的技术基…