[java] JavaBean이란 무엇입니까?

나는 “Bean”이 속성과 getter / setter를 가진 Java 클래스라는 것을 이해했다. 내가 이해하는 한 C 구조체와 같습니다. 그게 사실입니까?

또한 빈과 정규 클래스 사이에 실질적인 구문상의 차이가 있습니까? 특별한 정의 나 인터페이스가 있습니까?

기본적으로 왜 이것에 대한 용어가 있습니까?

또한 Serializable인터페이스는 무엇을 의미합니까?



답변

JavaBean은 단지 표준입니다

  1. 모든 개인 속성 ( 게터 / 세터 사용 )
  2. 인수없는 공개 생성자
  3. 구현 Serializable.

그게 다야. 컨벤션 일뿐입니다. 많은 라이브러리가 그것에 의존합니다.

에 관해서 SerializableAPI 문서에서 :

클래스의 직렬화 기능은 java.io.Serializable 인터페이스를 구현하는 클래스에 의해 가능합니다. 이 인터페이스를 구현하지 않는 클래스는 직렬화 또는 직렬화 해제 된 상태가 없습니다. 직렬화 가능 클래스의 모든 하위 유형은 직렬화 가능합니다. 직렬화 인터페이스에는 메소드 또는 필드가 없으며 직렬화 가능의 의미를 식별하는 역할 만합니다.

다시 말해, 직렬화 가능 객체는 스트림, 따라서 파일, 객체 데이터베이스 등에 실제로 기록 될 수 있습니다.

또한 JavaBean과 다른 클래스 간에는 구문상의 차이가 없습니다. 클래스가 표준을 따르는 경우 JavaBean입니다.

표준은 라이브러리가 미리 정의 된 방식으로 정의한 클래스 인스턴스를 사용하여 프로그래밍 방식으로 작업을 수행 할 수 있도록 허용하기 때문에 용어가 있습니다. 예를 들어, 라이브러리가 전달한 객체를 스트리밍하려는 경우 라이브러리가 객체를 직렬화 할 수 있기 때문에 라이브러리가 가능하다는 것을 알고 있습니다 (lib는 객체가 올바른 JavaBeans 여야한다고 가정).


답변

그것을 특별하게 들리게하는 용어가 있습니다. 현실이 그렇게 신비로운 곳은 없습니다.

기본적으로 “Bean”:

  • 직렬화 가능한 객체 (즉, 구현 java.io.Serializable하고 올바르게 수행)입니다.
  • getter 및 setter가 특정 이름을 가진 메소드 인 “properties”(예 : getFoo()“Foo”특성의 getter 임)
  • public 0-arg 생성자가 있습니다 (따라서 자유롭게 생성하고 속성을 설정하여 구성 할 수 있음).

최신 정보:

에 관해서는 Serializable그것은 아무것도하지만 자바를 알려주는 “마커 인터페이스”(어떤 함수를 선언하지 않는 인터페이스)를 구현하는 클래스 동의는 “직렬화”(그것은 할 수 있음을 의미한다) 것이 없다 – 프로세스가 변환 : 바이트 스트림으로의 인스턴스 이러한 바이트는 파일에 저장되거나 네트워크 연결 등을 통해 전송 될 수 있으며 JVM (적어도 객체 유형에 대해 알고있는 것)이 나중에 객체를 나중에 재구성 할 수 있도록 충분한 정보를 가질 수 있습니다. 응용 프로그램 또는 전체 다른 시스템에서도!

물론 그렇게하기 위해서는 클래스는 특정 제한 사항을 준수해야합니다. 그중에서도 모든 인스턴스 필드는 기본 유형 (int, bool 등)이거나 직렬화 가능한 일부 클래스의 인스턴스이거나 transientJava가 필드를 포함하지 않도록 표시 되어야합니다. (물론 이것은 transient필드가 스트림을 넘어도 여행에서 살아남지 않음을 의미합니다. 필드가있는 클래스는 transient필요한 경우 다시 초기화 할 수 있도록 준비해야합니다.)

이러한 제한 사항을 준수 할 수없는 클래스는 구현해서는 안됩니다 Serializable(IIRC의 경우 Java 컴파일러에서도이를 허용 하지 않음 ).


답변

JavaBeans는 매우 간단한 코딩 규칙을 준수하는 Java 클래스입니다. 당신이 할 일은

  1. java.io.Serializable인터페이스 구현 -객체의 상태를 저장
  2. 공개 빈 인수 생성자를 사용하여 객체를 인스턴스화하십시오.
  3. 공개 getter / setter 메소드 제공-개인 변수 (properties)의 값을 가져오고 설정합니다.

답변

자바 빈즈의 속성

JavaBean은 특정 프로그래밍 규칙을 만족시키는 Java 객체입니다.

  1. JavaBean 클래스는 Serializable또는
    Externalizable

  2. JavaBean 클래스에는 인수가없는 생성자가 있어야합니다.

  3. 모든 JavaBean 특성에는 공용 setter 및 getter 메소드가 있어야합니다.

  4. 모든 JavaBean 인스턴스 변수는 개인용이어야합니다

자바 빈즈의 예

@Entity
public class Employee implements Serializable{

   @Id
   private int id;
   private String name;
   private int salary;

   public Employee() {}

   public Employee(String name, int salary) {
      this.name = name;
      this.salary = salary;
   }
   public int getId() {
      return id;
   }
   public void setId( int id ) {
      this.id = id;
   }
   public String getName() {
      return name;
   }
   public void setName( String name ) {
      this.name = name;
   }
   public int getSalary() {
      return salary;
   }
   public void setSalary( int salary ) {
      this.salary = salary;
   }
}


답변

예를 들어 설명하십시오.

1. 수입 java.io.Serializable

직렬화에 대해서는 문서를 참조하십시오 .

2. 개인 분야

외부 클래스가 해당 필드를 쉽게 수정할 수 없도록 필드는 개인용이어야합니다. 해당 필드에 직접 액세스하는 대신 일반적으로 getter / setter 메소드가 사용됩니다.

3. 생성자

인수가없는 공개 생성자

4. 게터 / 세터

개인 필드에 액세스하고 수정하기위한 Getter 및 Setter 메소드

/** 1. import java.io.Serializable */
public class User implements java.io.Serializable {
    /** 2. private fields */
    private int id;
    private String name;

    /** 3. Constructor */
    public User() {
    }
    public User(int id, String name) {
        this.id = id;
        this.name = name;
    }

    /** 4. getter/setter */
    // getter
    public int getId() {
        return id;
    }
    public String getName() {
        return name;
    }
    // setter
    public void setId(int id) {
        this.id = id;
    }
    public void setName(String name) {
        this.name = name;
    }
}


답변

Java Beans는 적은 코드와 더 많은 작업 방식을 위해 사용하고 있습니다 … Java Beans는 Java EE 전체에서 런타임 발견 및 액세스를위한 범용 계약으로 사용됩니다. 예를 들어, JSP (JavaServer Pages)는 페이지 간 또는 서블릿과 JSP 간의 데이터 전송 오브젝트로 Java Bean을 사용합니다. Java EE의 JavaBeans Activation Framework는 Java Bean을 사용하여 MIME 데이터 유형에 대한 지원을 Java EE에 통합합니다. Java EE 관리 API는 Java EE 환경에서 관리 할 자원을 계측하기위한 기초로 JavaBeans를 사용합니다.

직렬화 정보 :

객체 직렬화에서 객체는 객체의 유형과 객체에 저장된 데이터 유형에 대한 정보뿐만 아니라 객체의 데이터를 포함하는 일련의 바이트로 표현 될 수 있습니다.

직렬화 된 객체가 파일에 기록 된 후에는 파일에서 읽혀지고 역 직렬화 될 수 있습니다. 즉 객체와 해당 데이터를 나타내는 유형 정보 및 바이트를 사용하여 객체를 메모리에 다시 만들 수 있습니다.


답변

Bean이 지속되어 서버간에 전송되므로 여러 서버에 프로젝트를 배치 할 때 직렬화가 유용합니다.