POJO (Plain Old Java Object)라는 용어는 정확히 무엇을 의미합니까?
POJO (Plain Old Java Object) 라는 용어는 무엇 을 의미합니까? 나는 충분한 설명을 수 없었다.
POJO의 Wikipedia 페이지에 따르면 POJO는 특수 객체가 아닌 일반 Java 객체입니다. 자, 무엇이 Java에서 특별하게 만들어져있는 것은 무엇입니까?
위의 페이지는 또한 POJO가 미리 지정된 클래스를 확장하거나 미리 지정된 인터페이스를 구현하거나 미리 지정된 주석을 포함합니다. 그것은 또한 POJO 에이 같은 인터페이스를 구현할 수 없습니다 뜻 Serializable
, Comparable
애플릿 또는 다른 사용자가 클래스 / 인터페이스와 같은 또는 클래스를?
또한 위의 정책 (확장 없음, 구현 없음)은 외부 라이브러리를 사용할 수 없습니다.
POJO는 어디에 사용 어디에 있습니까?
편집 :보다 구체적으로 Java 또는 외부 라이브러리의 일부인 클래스 / 인터페이스를 확장 / 구현할 수 있습니까?
Plain Old Java Object 이 이름은 주어진 객체가 EJB 2 프레임 워크에 정의 된 것과 같은 특수 객체가 아니라 Java 객체임을 강조하는 데 사용됩니다.
클래스 A {}
클래스 B 확장 / 구현 C {}
참고 : C가 분산 프레임 워크 클래스 또는 ifc 일 때 B는 POJO가 아닙니다. 예 : javax.servlet.http.HttpServlet, javax.ejb.EntityBean 또는 J2EE extn 과염 화 가능 / 비교 불가능합니다. 어느 정도 가능하게 / 비교 가능은 POJO에 유효하기 때문에.
여기서 A는 독립적 인 단순한 객체입니다. B는 C를 확장 / 구현하기 때문에 B는 Special obj입니다. 따라서 B 객체는 C에서 더 많은 의미를 얻고 B는 C의 규칙을 따르도록 제한적이며 B는 분산-frame 워크와 밀접하게 결합 됩니다. 따라서 B는 정의에서 POJO가 아닙니다.
클래스 A 참조를 사용하는 코드는 그 유형에 대해 알 필요가 많은 프레임 워크에서 사용할 수 있습니다.
따라서 POJO는 1) 미리 지정된 클래스를 확장하고 2) 미리 지정된 인터페이스를 구현할 필요가 없습니다.
JavaBean은 생성 화 가능하고 인수가없는 생성 할 간단한 명명 규칙을 사용하여 getter 및 setter 메서드를 사용하여 속성에 액세스 할 수있는 POJO의 예입니다.
POJO는 순전히 비즈니스에서 확장을 맞추고 (엔터프라이즈) 프레임 워크에 의존하지. 비즈니스에서 생성되는 코드가 인스턴스가 생성되는 방법,이 인스턴스가 제공 서비스 (EJB ..), 그 특성 (Stateful / Stateless)은 프레임 워크에서 외부 xml을 사용하여 결정합니다. 파일.
예 1 : JAXB는 Java 객체를 XML로 제공 서비스입니다. Java 기본 생성자는 간단하며 기본 생성자 getter 및 setter가 제공됩니다.
예 2 : 간단한 자바 클래스가 테이블을 표현하는 데 사용되는 Hibernate. 열이 인스턴스가됩니다.
예 3 : REST 서비스. REST 서비스에서는 DB를 통해 일부 작업을 수행하는 서비스 계층과 Dao 계층이 있습니다. 따라서 Dao는 공급 업체별 쿼리 및 작업을 사용합니다. 서비스 계층은 DB 작업을 수행 할 DAO 계층을 호출 할 책임이 있습니다. DAO의 API (메소드) 생성 또는 업데이트는 POJO를 인수로 받아 해당 POJO를 업데이트하고 DB에 삽입 / 업데이트합니다. 이러한 POJO (Java 클래스)에는 각 열과 해당 getter 및 setter의 상태 (인스턴스 변수)가 있습니다.
어떤 사람들은 주석이 우아하다고 생각하지만 XML은 장황하고 추하고 유지하기 어렵다고 생각하지만 다른 사람들은 주석이 POJO 모델을 오염시킨다. 따라서 XML의 대안으로 많은 프레임 워크 (예 : Spring, EJB 및 JPA)에서 주석을 대신 또는 XML에 추가하여 사용할 수 있습니다.
장점 :
인프라 프레임 워크에서 애플리케이션 코드를 분리하는 것은 POJO 사용의 많은 이점 중 하나입니다. POJO를 사용하면 어디에서나 진화하는 인프라 프레임 워크에서 애플리케이션을 분리하여 애플리케이션의 비즈니스를 할 수 있습니다. 새 버전으로 업그레이드하거나 다른 프레임 워크로 전환하는 것이 더 안전하고 덜 위험합니다. 또한 POJO는 쉽게 만들어 개발을 단순화하고 테스트를 수행합니다. 비즈니스 로직은 인프라 코드와 얽 히지 않기 때문에 더 명확하고 단순 해집니다.
Martin Fowler에 따르면 , 그와 다른 사람들은 EJB 간섭은 대조적으로 표준 클래스 인 것을 설명하는 방법으로 그것을 생각해 봅니다.
용어의 사용은 당신에게 말하는 것을 의미합니다. 예를 들어, 필요한 준비 프레임 워크가 POJO를 다른 POJO에 배치 할 수 있다는 것을 알려 주면 특별한 작업을 수행 할 수 있습니다. 계약과 계약을 따를 필요가 모든 인터페이스를 구현합니다. 또는 특별 수업을 확장하십시오. 이미 가지고있는 것을 그대로 사용할 수 있습니다.
UPDATE 또 다른 예를 들자면 : Hibernate는 모든 POJO (사용자가 생성 한 모든 객체)를 SQL 테이블에 매핑 할 수 있습니다 Core Data (iPhone의 Objective C)에서 수업하는 NSManagedObject를 확장해야하는 시스템이이를 지속 할 수 있습니다. 데이터베이스. 그런 의미에서 Core Data는 Hibernate가 할 수있는 동안 POJO (또는 POOCO = PlainOldObjectiveCObject)와 함께 작동 할 수 있습니다. (방금 집어 들기 시작하기 때문에 핵심 데이터에 대해 100 % 힌트하지 않을 수 있습니다. :-)).
Plain Old Java Object :)
글쎄, 당신은 모두 끔찍한 제한 인 것처럼 들리게 만듭니다.
POJO가 사용되는 일반적인 상황에서 이는 더 많은 이점이 있습니다.
즉, 어떤 라이브러리 / API를 사용하든 어떤 식 으로든 처리되지 않은 Java 개체를 완벽하게 처리 할 수 있습니다. 즉, 작업을 수행하기 위해 특별한 작업을 수행 할 필요가 없습니다.
예를 들어, XStream XML 프로세서는 Serializable
인터페이스를 구현하지 않는 Java 클래스를 기꺼이 처리합니다 . 그것은 플러스입니다! 강제 SomeProprietaryDataObject
로 AbstractProprietaryDataObject
클래스 를 구현 하거나 확장하는 데 사용되는 데이터 개체와 함께 작동하는 많은 제품 . 많은 라이브러리는 빈 동작, 즉 getter 및 setter를 예상합니다.
일반적으로 POJO와 함께 작동하는 것은 무엇이든 작동합니다. 따라서 XStream은 물론 Serializable 클래스도 생성됩니다.
POJO는 Enterprise Edition (J2EE) 항목 (콩 등)이 필요한 데 필요한 일반 오래된 Java 개체입니다.
POJO는 실제로 단단하고 빠른 정의가 사용됩니다 "일반적인"비오는 자바를 사용하여 설명하는 손으로 물결 치는 방법에 가깝습니다. 외부 라이브러리 또는 프레임 워크를 사용하여 객체를 POJO 로로 만드는지 여부는 주로 WHAT 라이브러리 / 프레임 워크에 따라 보는 사람의 눈에 있습니다.
POJO의 요점은 단순하며 보이는 것보다 더 복잡한 것을 가정하는 것처럼 보입니다.
라이브러리가 POJO를 지원하는 경우 모든 클래스의 클래스가 허용됨을 의미합니다. POJO는 인터페이스를 사용하지 않습니다.
IMHO 위키 페이지는 상당히 명확합니다. POJO는 주석 처리를하지 않습니다.
확장에 대한 모든 비즈니스 로직을 포함하는 POJO (Plain Old Java Object).
특급. 단일 메소드를 포함하는 Pojo
public class Extension {
public static void logInfo(String message) {
System.out.println(message);
}
}
POJO (Plain Old Java Object)라는 용어는 무엇을 의미합니까?
POJO 는 Martin Fowler, Rebecca Parsons 및 Josh Mackenzie가 2000 년 9 월 컨퍼런스에서 강연을 준비 할 때 만들었습니다. Martin Fowler in Patterns of Enterprise Application Architecture 가 Java에서 도메인 모델 패턴 을 구현하는 방법을 설명합니다 . EJB Entity Beans 사용의 몇 가지 단점을 열거 한 후 :
사람들이 J2EE에서 도메인 모델 개발에 대해 이야기 할 때 항상 많은 열이 발생합니다. 많은 교재와 J2EE 입문 서적에서 엔티티 빈을 사용하여 도메인 모델을 개발할 것을 제안하지만이 접근 방식에는 적어도 현재 (2.0) 사양에서는 심각한 문제가 있습니다.
Entity Bean은 CMP (Container Managed Persistence)를 사용할 때 가장 유용합니다.
엔티티 Bean은 재진입 할 수 없습니다. 즉, 한 엔티티 빈에서 다른 객체로 호출하면 다른 객체 (또는 호출하는 객체)는 첫 번째 엔티티 빈으로 다시 호출 할 수 없습니다.
... 세분화 된 인터페이스가있는 원격 개체가있는 경우 성능이 끔찍합니다.
엔티티 빈으로 실행하려면 컨테이너와 데이터베이스가 연결되어 있어야합니다. 이렇게하면 빌드 시간이 늘어나고 테스트가 데이터베이스에 대해 실행되어야하므로 테스트 실행 시간도 늘어납니다. 엔터티 빈도 디버깅하기가 까다 롭습니다.
대안으로 그는 도메인 모델 구현 을 위해 일반 Java 객체 를 사용하도록 제안했습니다 .
대안은 일반 Java 객체를 사용하는 것입니다.하지만 이로 인해 종종 놀란 반응이 나타납니다. 얼마나 많은 사람들이 EJB 컨테이너에서 일반 Java 객체를 실행할 수 없다고 생각하는지 놀랍습니다. 나는 사람들이 멋진 이름이 없기 때문에 일반 자바 객체를 잊어 버린다는 결론에 이르렀다. 그것이 바로 2000 년 강연을 준비하는 동안 Rebecca Parsons, Josh Mackenzie와 제가 그들에게 POJOs (평범한 오래된 Java 객체)를 준 이유 입니다. POJO 도메인 모델은 결합하기 쉽고 빌드가 빠르며 EJB 컨테이너 외부에서 실행 및 테스트 할 수 있으며 EJB와 독립적입니다 (이것이 EJB 공급 업체가이를 사용하도록 권장하지 않는 이유 일 수 있습니다).
'ProgramingTip' 카테고리의 다른 글
컴파일러가 "char"를 "int"와 일치하지만 "short"가 아닌 이유는 무엇입니까? (0) | 2020.11.05 |
---|---|
Kotlin 지원 필드는 무엇입니까? (0) | 2020.11.05 |
메시지와 포스트 메시지의 차이점은 무엇이며 C #, WPF 및 Pure Windows 프로그래밍과 어떤 관련이입니까? (0) | 2020.11.05 |
Firefox 4 onBeforeUnload 사용자 지정 메시지 (0) | 2020.11.05 |
node.js에서 파일 서버와 socket.io 분리 (0) | 2020.11.05 |