什么是Java bean?

时间:2012-07-10 05:11:55

标签: java javabeans

  

可能重复:
  What's the point of beans?

什么是javabean?它是干什么用的?什么是代码示例?我听说它用于与getter和setter方法有关吗?我对java bean是什么以及你甚至访问它的地方都很困惑。我用谷歌搜索,但找不到明确的答案。

4 个答案:

答案 0 :(得分:48)

Java Bean是一个普通的Java类,它的私有属性具有公共getter和setter方法。

Java Bean通常用作帮助程序类。

示例 -

public class User implements java.io.Serializable {

    private String name;
    private Integer age;

    public String getName(){
        return this.name;
    }

    public void setName(String name){
        this.name = name;
    }

    public Integer getAge(){
        return this.age;
    }

    public void setAge(Integer age){
        this.age = age;
    }
}

实现Serializable不是强制性的,但如果你想在Java的内存中保留或传输Javabeans,则非常有用,例如在硬盘或网络上。

Places where JavaBeans are used?

答案 1 :(得分:19)

JavaBeans是Java的可重用软件组件。实际上,它们是用符合特定约定的Java编程语言编写的类。它们用于将许多对象封装到单个对象(bean)中,以便它们可以作为单个bean对象而不是作为多个单独对象传递。 JavaBean是一个可序列化的Java对象,具有0参数构造函数,并允许使用getter和setter方法访问属性。

优点

  • Bean获得了Java“一次编写,随处运行”范例的所有好处。
  • 可以控制暴露给其他应用程序的Bean的属性,事件和方法。
  • 可以提供辅助软件来帮助配置Bean。
  • Bean的配置设置可以保存在永久存储中,以后可以恢复。
  • Bean可以注册以接收来自其他对象的事件,并可以生成发送给它的事件。

缺点

  • 具有nullary构造函数的类可能会在无效状态下进行实例化。如果这样的类是由开发人员手动实例化的(而不是由某种框架自动实例化),那么开发人员可能没有意识到他已经将类实例化为无效状态。编译器无法检测到这样的问题,即使有文档记录,也无法保证开发人员会看到文档。
  • 必须为每个属性创建一个getter,并为许多,大部分或全部创建一个setter,这会产生大量的样板代码。

示例:

package beans;

/**
 * Class <code>PersonBean</code>.
 */
public class PersonBean implements java.io.Serializable {

    private String name;

    private boolean deceased;

    /** No-arg constructor (takes no arguments). */
    public PersonBean() {
    }

    /**
     * Property <code>name</code> (note capitalization) readable/writable.
     */
    public String getName() {
        return this.name;
    }

    /**
     * Setter for property <code>name</code>.
     * @param name
     */
    public void setName(final String name) {
        this.name = name;
    }

    /**
     * Getter for property "deceased"
     * Different syntax for a boolean field (is vs. get)
     */
    public boolean isDeceased() {
        return this.deceased;
    }

    /**
     * Setter for property <code>deceased</code>.
     * @param deceased
     */
    public void setDeceased(final boolean deceased) {
        this.deceased = deceased;
    }
}

参考http://en.wikipedia.org/wiki/JavaBeans

答案 2 :(得分:7)

嗯,JavaBean API定义了许多与JavaBeans相关的约定。根据维基百科:

  

所需的约定如下:

     
      
  • 该类必须具有公共默认构造函数(无参数)。这样可以在编辑和激活框架中轻松实例化。
  •   
  • 必须使用get,set,is(用于布尔属性而不是get)和其他方法(所谓的)来访问类属性   访问方法和mutator方法),遵循标准命名   惯例。这样可以轻松自动检查和更新bean   框架内的状态,其中许多包括自定义编辑器   各种类型的属性。塞特斯必须只收到一个论点。
  •   
  • 该类应该是可序列化的。它允许应用程序和框架可靠地保存,存储和恢复bean中的状态   时尚独立于VM和平台。
  •   

通常,这些是可以在应用程序中找到的最常见的类类型,因为它们可用于对所使用的数据进行建模。这种bean的一个例子如下所示:

public class Person implements Serializable
{
  private String name;
  private boolean alive;

  public Person()
  {
    // constructor logic...
  }

  public String getName()
  {
    return name;
  }

  public void setName(String name)
  {
    this.name = name;
  }

  public boolean isAlive()
  {
    return alive;
  }

  public void setAlive(boolean alive)
  {
    this.alive = alive;
  }
}

如您所见,属性反映在getter和setter中。

HTH

答案 3 :(得分:1)

如果你在谈论 java-beans而不是EJB Bean ,那么这里有解释......

1。 JavaBean有一个不带参数的构造函数。

2. JavaBean有一组属性。

3. JavaBean具有访问器(getXxx或用于布尔属性的isXxx)方法和mutator方法(setXxx),允许访问其基础属性。

第3点说明了一个带有私有实例变量和公共getter setter的java类。

例如:

import java.util.Date;

public class User {
    private Date loginDate;
    private String name;
    private String password;

    public User() { }

    public Date getLoginDate() {
        return loginDate;
    }

    public String getName() {
        return name;
    }

    public String getPassword() {
        return password;
    }

    public void setLoginDate(Date loginDate) {
        this.loginDate = loginDate;
    }

    public void setName(String name) {
        this.name = name;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public void delete() {
        // code to delete user from database
    }

    public void update() {
        // code to update user in database
    }

    public static User getUser(String name) {
        // code returning a new User object
        // populated from the database
    }
}