什么是Java bean?

Rya*_*len 34 java javabeans

可能重复:
豆子有什么意义?

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

Pra*_*mar 50

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;
    }
}
Run Code Online (Sandbox Code Playgroud)

实现Serializable不是强制性的,但如果您希望在Java内存之外保留或传输Javabeans,例如在硬盘或网络中,则非常有用.

使用JavaBeans的地方?

  • 公共默认构造函数怎么样? (3认同)
  • 所以,如果它只是一个普通的类,为什么甚至打扰它称为bean?我不明白D: (3认同)
  • @IlyaBuziuk根据[this](http://stackoverflow.com/a/2291964/3775798),如果没有明确定义,Java将自动提供一个公共默认构造函数。我认为这意味着您应该可以安全地在您的 bean 定义中省略一个。 (2认同)

Hem*_*lia 22

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;
    }
}
Run Code Online (Sandbox Code Playgroud)

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


Cro*_*ter 7

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

所需的约定如下:

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

通常,这些是可以在应用程序中找到的最常见的类类型,因为它们可用于对所使用的数据建模.这种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;
  }
}
Run Code Online (Sandbox Code Playgroud)

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

HTH