JavaBeans가 사용되는 장소?


172

JavaBean이란 무엇이며 왜 필요한가요? 클래스와 인터페이스 구조로 모든 앱을 만들 수 있습니까? 왜 콩이 필요한가요? 그리고 클래스와 인터페이스 대신에 bean이 필수적인 예제를 제공해 주시겠습니까?

아래 문맥에서 빈의 중요성을 설명하십시오.

  • apps 앱
  • 독립형 앱

10
"Java Beans"와 "Enterprise Java Beans 또는 EJBs"를 혼동하지 않기를 바랍니다.
Rahul

53
실제로 내가 EJB와 혼동 할 것은 그것으로이 아무것도 특별 ..is 방법 콩 다음 자체에 대해 잘 모릅니다 ..
는 Sidharth

답변:


178

그들은 종종 실제 데이터를 나타냅니다. 다음은 Javabean의 간단한 예입니다.

public class User implements java.io.Serializable {

    // Properties.
    private Long id;
    private String name;
    private Date birthdate;

    // Getters.
    public Long getId() { return id; }
    public String getName() { return name; }
    public Date getBirthdate() { return birthdate; }

    // Setters.
    public void setId(Long id) { this.id = id; }
    public void setName(String name) { this.name = name; }
    public void setBirthdate(Date birthdate) { this.birthdate = birthdate; }

    // Important java.lang.Object overrides.
    public boolean equals(Object other) {
        return (other instanceof User) && (id != null) ? id.equals(((User) other).id) : (other == this);
    }
    public int hashCode() {
        return (id != null) ? (getClass().hashCode() + id.hashCode()) : super.hashCode();
    }
    public String toString() {
        return String.format("User[id=%d,name=%s,birthdate=%d]", id, name, birthdate);
    }
}

구현 Serializable은 필수적이지 않지만 하드 디스크 나 네트워크 등의 Java 메모리 외부에서 Javabean을 유지하거나 전송할 수있는 경우 매우 유용합니다.

예를 들어 DAO 클래스에서이 테이블 을 사용하여 테이블 의 데이터를 데이터베이스에 저장 하는 사용자 목록을 만들 수 있습니다 user.

List<User> users = new ArrayList<User>();
while (resultSet.next()) {
    User user = new User();
    user.setId(resultSet.getLong("id"));
    user.setName(resultSet.getString("name"));
    user.setBirthdate(resultSet.getDate("birthdate"));
    users.add(user);
}
return users;

예를 들어 서블릿 클래스에서이를 사용 하여 데이터베이스에서 UI 데이터 를 전송할 수 있습니다 .

protected void doGet(HttpServletRequest request, HttpServletResponse response) {
    List<User> users = userDAO.list();
    request.setAttribute("users", users);
    request.getRequestDispatcher("users.jsp").forward(request, response);
}

예를 들어에서 JSP 페이지를 수행 할 수 있습니다 에 액세스 하여 EL 데이터를 표시하려면 자바 빈즈 규칙을 따릅니다 :

<table>
    <tr>
        <th>ID</th>
        <th>Name</th>
        <th>Birthdate</th>
    </tr>
    <c:forEach items="${users}" var="user">
        <tr>
            <td>${user.id}</td>
            <td><c:out value="${user.name}" /></td>
            <td><fmt:formatDate value="${user.birthdate}" pattern="yyyy-MM-dd" /></td>
        </tr>
    </c:forEach>
</table>

말이 되나요? 데이터 저장 , 전송액세스 를 위해 어디에서나 사용할 수 있는 일종의 규칙 입니다 .

또한보십시오:


11
좋은 설명과 일반적으로이 구현 직렬화
augpt

그러나 Java doc에서는 직렬화를 구현해야한다는 언급이 있으므로 명확하게 할 수 있습니까?
SSP

8
@ SSP : 1) javadoc이 없습니다. 2) "해야한다"! = "필수".
BalusC

61

콩 자체

JavaBeans 는 어디에나 있으며, 그것들은 컨벤션이며 거의 모든 작은 단일 라이브러리는 그 컨벤션을 사용하여 사물을 자동화합니다. JavaBeans를 사용해야하는 몇 가지 이유는 다음과 같습니다.

  • 그들은 잘 직렬화됩니다.
  • 리플렉션을 사용하여 인스턴스화 할 수 있습니다.
  • 그렇지 않으면 반사를 사용하여 매우 쉽게 제어 할 수 있습니다.
  • 비즈니스 코드에서 실제 데이터를 캡슐화하는 데 좋습니다.
  • 공통 규칙은 누구나 콩을 사용할 수 있으며 모든 종류의 문서 / 설명서없이 쉽고 일관된 방식으로 모든 사람의 콩을 사용할 수 있음을 의미합니다.
  • POJO에 매우 가깝기 때문에 실제로 시스템의 다른 부분들 사이에 훨씬 더 많은 상호 운용성이 있습니다.

또한 Enterprise JavaBeans도 있습니다. Enterprise JavaBeans 는 완전히 또 다른 문제이며 일반 JavaBean과 혼합해서는 안됩니다. 이름이 비슷하고 두 가지를 혼동하기 쉽기 때문에 EJB : s를 언급하고 싶었습니다.

웹 애플리케이션의 Bean

웹 애플리케이션 컨텍스트에서 "일반"JavaBeans를 고려하면 다리에 신발을 신는 것보다 더 의미가 있습니다. 서블릿 스펙은 세션을 직렬화 할 수 있어야하므로 세션에서 직렬화 가능한 것으로 세션에 데이터를 저장해야 함을 의미합니다. SomeBusinessDataBean을 세션에 넣기 만하면 쉽게, 사양을 준수하며 편리하게 사용할 수 있습니다.

JavaBeans를 사용하면 응용 프로그램의 일부를 완전히 분리 할 수 ​​있으므로 응용 프로그램에서 해당 데이터를 전송하는 것도 쉽습니다. 매우 큰 회사에서 편지로 자바 빈즈 및 부서와 같은 응용 프로그램의 다양한 서브 시스템을 생각 : - Dept.A 메일 Dept.B 데이터의 무리를 Dept.B은 모르는 걱정도 또는 - 데이터는 단지 어디에서 왔는지 문자를 열어서 열 수 있고, 그 내용을 읽고 해당 데이터를 기반으로하는 일을합니다.

독립형 애플리케이션의 Bean

실제로 위의 내용은 독립 실행 형 앱에도 적용되지만 유일한 차이점은 독립 실행 형 응용 프로그램에는 상태 저장 UI가 있지만 웹 응용 프로그램에는 상태 저장 UI : s가 있기 때문에 UI를 조금 더 엉망으로 만들 수 있다는 것입니다. . 이러한 차이로 인해 독립형 애플리케이션으로 혼란을 겪는 것이 더 쉽지만 다른 주제의 가치가 있으며 JavaBeans와 직접 관련이 없습니다.


50

콩은 실제로 아무것도 아닙니다. 클래스가 "bean"이 되려면 필요한 것은 다음과 같습니다.

  • 인수 생성자가없는 공개
  • 직렬화 가능해야합니다 (직접 또는 수퍼 클래스 중 하나를 통해 직렬화 가능 인터페이스 구현).

여기에 특정 상황에서 필드를 검색 할 수 있도록하려면 특정 명명 규칙을 준수하는 클래스 속성에 대한 getter 및 setter를 추가 할 수 있습니다 (예 : 해당 클래스를 시각적 편집기에서 끌어서 놓을 수있는 객체로 만들기). 예를 들어 IDE).

Sun 에서 직접 더 찾을 수 있습니다 .


15

Java Bean은 다양한 환경에서 재사용 할 수 있도록 설계된 소프트웨어 구성 요소입니다. Bean의 기능에는 제한이 없습니다. 문서의 맞춤법 검사와 같은 간단한 기능이나 주식 포트폴리오의 성과 예측과 같은 복잡한 기능을 수행 할 수 있습니다. Bean은 최종 사용자에게 표시 될 수 있습니다. 이에 대한 예는 그래픽 사용자 인터페이스의 버튼입니다. Bean은 사용자에게 보이지 않을 수도 있습니다. 멀티미디어 정보 스트림을 실시간으로 디코딩하는 소프트웨어가 이러한 유형의 빌딩 블록의 예입니다. 마지막으로 Bean은 사용자의 워크 스테이션에서 자율적으로 작동하거나 다른 분산 구성 요소 세트와 협력하여 작동하도록 설계 될 수 있습니다. 데이터 포인트 세트에서 원형 차트를 생성하는 소프트웨어는 로컬로 실행할 수있는 Bean의 예입니다. 하나,

Java Bean으로 사용하기 위해 소프트웨어 개발자가 클래스에 어떤 특정 변경 사항을 작성해야하는지 간단히 살펴 보겠습니다. 그러나 Java 디자이너의 목표 중 하나는이 기술을 쉽게 사용할 수 있도록하는 것이 었습니다. 따라서 코드 변경이 최소화됩니다.

자바 빈의 장점

소프트웨어 구성 요소 아키텍처는 소프트웨어 구성 요소를 처리하기위한 표준 메커니즘을 제공합니다. 다음 목록은 Java 기술이 컴포넌트 개발자에게 제공하는 특정 이점 중 일부를 열거합니다.

  • Bean은 Java의 "한 번 작성, 어디서나 실행"패러다임의 모든 이점을 얻습니다.
  • 애플리케이션 빌더 도구에 노출되는 Bean의 특성, 이벤트 및 메소드를 제어 할 수 있습니다.
  • Bean은 다른 로케일에서 올바르게 작동하도록 설계되어 글로벌 시장에서 유용합니다.
  • 개인이 Bean을 구성 할 수 있도록 보조 소프트웨어를 제공 할 수 있습니다. 이 소프트웨어는 해당 구성 요소의 디자인 타임 매개 변수를 설정하는 경우에만 필요합니다. 런타임 환경에 포함될 필요는 없습니다.
  • Bean의 구성 설정은 지속적 스토리지에 저장되어 나중에 복원 할 수 있습니다.
  • Bean은 다른 오브젝트로부터 이벤트를 수신하도록 등록하고 다른 오브젝트로 전송되는 이벤트를 생성 할 수 있습니다.

다음은 Javabean의 간단한 예입니다.

public class MyBean implements java.io.Serializable
{

       protected  int theValue;

       public MyBean()
       {
       }

       public void setMyValue(int newValue)
       {
           theValue = newValue;
       }

      public int getMyValue()
      {
           return theValue;
      }

}

이것은 JavaBeans 지속성 메커니즘에 의해 자동으로 저장 및 복원되는 상태 (변수 theValue)를 가진 MyBean이라는 실제 Bean이며 시각적 프로그래밍 환경에서 사용할 수있는 MyValue라는 특성을 갖습니다. 이 Bean에는 시각적 표현이 없지만 JavaBean 구성 요소에는 필요하지 않습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.