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

 

参考链接:

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值