zoukankan      html  css  js  c++  java
  • JavaBeans wiki 摘译

    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

    参考链接:

  • 相关阅读:
    vue-music 关于搜索历史本地存储
    Node.js中package.json中^和~的区别
    主流浏览器内核
    pm2 日常使用
    前端验证用户登陆状态(vue.js)
    ng-repeat循环出来的部分调用同一个函数并且实现每个模块之间不能相互干扰
    行内元素垂直方向位置调整的一些感悟和困惑
    由overflow-x:scroll产生的收获
    子代选择器(>)后代选择器(' ')的区别
    content相关属性
  • 原文地址:https://www.cnblogs.com/larryzeal/p/5954690.html
Copyright © 2011-2022 走看看