JavaBeans wiki 摘译

鉴于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 }

简单测试:

 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 }

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>

参考链接:

时间: 2024-10-09 21:51:46

JavaBeans wiki 摘译的相关文章

snakeyaml - Documentation.wiki

SnakeYAML Documentation This documentation is very brief and incomplete. Feel free to fix or improve it. Installation If you use Maven just add a dependency as described here. If you do not use Maven download the latest JAR and put it to the classpat

[基础规范]JavaBeans规范

本文来自维基百科:http://en.wikipedia.org/wiki/JavaBeans#JavaBean_conventions JavaBeans是Java语言中可以重复使用的软件组件,它们是一种特殊的Java类,将很多的对象封装到了一个对象(bean)中.特点是可序列化,提供无参构造器,提供getter方法和setter方法访问对象的属性. 优点: Bean可以控制它的属性.事件和方法是否暴露给其他程序. Bean可以接收来自其他对象的事件,也可以产生事件给其他对象. 有软件可用来配

wiki中文语料+word2vec (python3.5 windows win7)

环境: win7+python3.5 1. 下载wiki中文分词语料   使用迅雷下载会快不少,大小为1个多G      https://dumps.wikimedia.org/zhwiki/latest/zhwiki-latest-pages-articles.xml.bz2 2. 安装opencc用于中文的简繁替换 安装exe的版本 到https://bintray.com/package/files/byvoid/opencc/OpenCC 中下载 opencc-1.0.1-win64.7

遍历脚本调用接口wiki

#!/bin/bash #set -x #allid=`curl http://xx/wiki/children.json?pageid=$1   2>/dev/null |awk -F "[" '{print $2}'|sed 's/{/\n/g'|awk -F','  '{print $4,$6}'|awk -F : '{print $3}'` listwiki() { curl http://xx/wiki/children.json?pageid=$1   2>/d

获取wiki某网页信息shell即获取wiki子目录信息-shell

#!/bin/bash ################################################## ################################################## set -e ##需要参数 if [ $# -eq 0 ];then echo "需要参数,例如下面命令" echo "sh $0 -h" exit 1 fi ##shell需要jq命令 #apt-get install -y jq  1&g

https://github.com/angular-ui/ui-grid/wiki/Templating

$scope.gridOptions = { data: self.myData, enableCellEditOnFocus: true, //enables the editor on a single click, if you use enableCellEdit: true you would have to doubleclick columnDefs: [{ field: 'firstName', displayName: 'First Name', width: 90 }, {

使用Git Wiki 管理文档时,文档编写的基本用法

自己初次接触GitLab,通过百度和自己查找资料,了解了一部分.在自己的工作中,主要用到GitLab的Wiki文档版本管理能力.我总结了一小部分文本编辑需要用到的东西. 一.文本的排版 为了让文本/文档的结构清晰明了,我们需要一下标题结构和文本格式.Wiki 主要的文本编辑语法用到的是Markdown.Markdown语法兼容HTML,可以直接在文档里用HTML撰写,只是有一些区块元素<div><table><pre><p>等标签,必须在前后加空行与其他内容

Broadmann area (wiki)

Sources: https://en.wikipedia.org/wiki/Brodmann_area Lateral surface Medial serface Areas 3, 1 & 2 – Primary Somatosensory Cortex (frequently referred to as Areas 3, 1, 2 by convention) Area 4 – Primary Motor Cortex Area 5 – Somatosensory Association

wiki 调研

1,关于wiki 做技术开发,需要做技术文档,编写方案. 调研了一圈,发现比较好用的wiki是dokuwiki. 还有就是商业的confluence. 2,关于dokuwiki 安装起来非常方便,下一步下一步就行了. 这个不需要数据库,所有文档那个都是存储在磁盘,用文件夹的方式存储. 把所有标题都进行了url decoder.再存储.这样啥语言都支持了. 插件也非常丰富,其中几个插件特别好用. 图片拷贝(支持chrome)直接粘贴就能上传图片. https://www.dokuwiki.org/