JavaBeans wiki 摘译

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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 }
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

 

参考链接:

以上是关于JavaBeans wiki 摘译的主要内容,如果未能解决你的问题,请参考以下文章

JSP-javabeans

What’s new in Channels 2 摘译

JavaBeans的介绍与使用

JavaBeans与内省(Introspector)

摘译 | 2017 Top 15 Python 数据科学类库;时间序列异常点检测;如何加入开源项目

JSP JavaBeans