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。

代码示例:

 package player;

 public class PersonBean implements java.io.Serializable {

     /**
* Property <code>name</code> (note capitalization) readable/writable.
*/
private String name = null; private boolean deceased = false; /** No-arg constructor (takes no arguments). */
public PersonBean() {
} /**
* Getter for property <code>name</code>
*/
public String getName() {
return name;
} /**
* Setter for property <code>name</code>.
* @param value
*/
public void setName(final String value) {
name = value;
} /**
* Getter for property "deceased"
* Different syntax for a boolean field (is vs. get)
*/
public boolean isDeceased() {
return deceased;
} /**
* Setter for property <code>deceased</code>.
* @param value
*/
public void setDeceased(final boolean value) {
deceased = value;
}
}

简单测试:

 import player.PersonBean;

 /**
* Class <code>TestPersonBean</code>.
*/
public class TestPersonBean {
/**
* Tester method <code>main</code> for class <code>PersonBean</code>.
* @param ARGS
*/
public static void main(String[] args) {
PersonBean person = new PersonBean(); person.setName("Bob");
person.setDeceased(false); // Output: "Bob [alive]"
System.out.print(person.getName());
System.out.println(person.isDeceased() ? " [deceased]" : " [alive]");
}
}

JSP 中的使用:

 <% // Use of PersonBean in a JSP. %>
<jsp:useBean id="person" class="player.PersonBean" scope="page"/>
<jsp:setProperty name="person" property="*"/> <html>
<body>
Name: <jsp:getProperty name="person" property="name"/><br/>
Deceased? <jsp:getProperty name="person" property="deceased"/><br/>
<br/>
<form name="beanTest" method="POST" action="testPersonBean.jsp">
Enter a name: <input type="text" name="name" size="50"><br/>
Choose an option:
<select name="deceased">
<option value="false">Alive</option>
<option value="true">Dead</option>
</select>
<input type="submit" value="Test the Bean">
</form>
</body>
</html>

参考链接:

JavaBeans wiki 摘译的更多相关文章

  1. snakeyaml - Documentation.wiki

    SnakeYAML Documentation This documentation is very brief and incomplete. Feel free to fix or improve ...

  2. [基础规范]JavaBeans规范

    本文来自维基百科:http://en.wikipedia.org/wiki/JavaBeans#JavaBean_conventions JavaBeans是Java语言中能够反复使用的软件组件,它们 ...

  3. JavaBean的任务就是: “Write once, run anywhere, reuse everywhere” Enterprise JavaBeans

    javaBean_百度百科 https://baike.baidu.com/item/javaBean/529577?fr=aladdin 区别EJB JavaBean 和 Server Bean(通 ...

  4. 烂泥:wiki系统confluence5.6.6安装、中文、破解及迁移

    本文由ilanniweb提供友情赞助,首发于烂泥行天下 想要获得更多的文章,可以关注我的微信ilanniweb confluence是一个专业的企业知识管理与协同软件,可以用于构建企业wiki.通过它 ...

  5. Wiki安装(PHP +Sqlite+Cache)

    前期准备 PHP http://windows.php.net/download   WinCache Extension for PHP URL:http://sourceforge.net/pro ...

  6. Confluence Wiki -- 页面限制

    Confluence Wiki 中 [页面设置] 应该如何理解? 当一个用户有这个权限后,这个用户可以对一个页面做限制,可以限制这个页面不能被其他用户浏览或编辑: 反之,如果没有这个权限,那么这个用户 ...

  7. working with fitnesse wiki pages

    fitnesse提供一个简单易用的wiki创建一个web页面用于测试.测试页面有一个button,允许所有的测试在这个页面运行,因此任何人在任何时间都可以去这个页面点击这个按钮,查看测试是否通过.fi ...

  8. Wiki设置

    在Wiki安装完成后,就wiki会提示下载LocalSettings.php文件,这是wiki的设置文件,当我们要对wiki进行设置的时候,就需要用到这个文件. 下面对常用的操作设置做简要讲解: —— ...

  9. Wiki安装

    我们推荐使用Mediawiki. MediaWiki是基于php环境的,所以如果需要使用该类wiki,就要先部署php的环境. wiki下载: https://www.mediawiki.org/wi ...

随机推荐

  1. tomcat启动报错,找不到相应的 queue,从而引发内存泄漏

    tomcat启动报错,无法创建 bean listenerStatusChangeDealHandler, no queue 'STOCK.NOTIFY_CHANGE.INTER.CACHE.QUEU ...

  2. web前端开发文档

  3. vue2.x 总结

    1.独立构建vs运行时构建 在按照vue1.0的配置配置好webpack后,会出现Failed to mount component: template or render function not ...

  4. scribe 搭建遇到的问题

    1.如果安装了多个boost版本或boost路径不是scribe脚本指定的话,会出现问题: checking whether the Boost::System library is availabl ...

  5. centos7 yum安装遇到报错:Head V3 RSA/SHA256 Signature, key ID 352c64e5: NOKEYer

    centos7 yum安装时遇到错误:Header V3 RSA/SHA256 Signature, key ID 352c64e5: NOKEY 无法安装时,可按如下方法解决: This mini ...

  6. windows bat启动多个应用程序

      windows bat启动多个应用程序 CreationTime--2018年7月26日11点02分 Author:Marydon 1.应用场景 每天开机后,都需要打开平常所需要的软件,又不想将程 ...

  7. 使用samba实现linux与windows文件共享

                       1,安装samba                              sudo apt-get install samba                 ...

  8. HTML5 学习笔记 应用程序缓存

    使用html5 通过创建cache manifest文件,可以轻松地创建web应用的离线版本. html5引入了应用程序缓存,这意味着web应用可进行缓存,并可在没有因特网连接时进行访问. 应用程序缓 ...

  9. 使用jquery的 uploadify,在谷歌浏览器上总会崩溃的解决方法

    最近做的项目使用了jquery的uploadify,但是在谷歌浏览器测试总是会出现崩溃.如: 因为是java项目. 解决的办法是: 给引入的js加上一个参数,时间戳就可以,防止缓存,使每一次都请求.( ...

  10. HTML5 拖拽的简单实践

    坑爹点记录: 1.一定要加入 event.preventDefault(); 不然无效. 2.想测试的话,随便找到一个layui的table演示页面,插入脚本即可.不过要先在全局插入jquery. v ...