Top

java proxy 예제

흥미롭게도 여러 인터페이스를 구현하는 프록시 클래스를 가질 수 있습니다. 그러나 구현하는 인터페이스에는 몇 가지 제한 사항이 있습니다. 동적 프록시를 만들 때 이러한 제한을 염두에 두어야 합니다: 프록시 인터페이스는 프록시 클래스에 의해 구현 되는 이러한 인터페이스입니다. 프록시 디자인 패턴에서 실제 개체를 인스턴스화하는 래퍼 또는 프록시 개체가 처음에 클라이언트가 프록시 개체에 요청을 하고 이 실제 개체의 사양을 기억하고 시작된 요청을 이 실제 개체로 전달합니다. 그런 다음 모든 연속된 요청이 캡슐화된 실제 개체로 직접 전달됩니다. 클래스의 원래 코드를 수정하지 않고. (위의 목록은 광범위하지 않으며 몇 가지 예만 나열합니다). 동적 프록시를 사용하면 단일 메서드가 있는 단일 클래스가 임의의 수의 메서드를 사용하여 임의의 클래스에 대한 여러 메서드 호출을 서비스할 수 있습니다. 동적 프록시는 일종의 Facade로 생각할 수 있지만 모든 인터페이스의 구현인 것처럼 가장할 수 있습니다. 표지 아래에서 모든 메서드 호출을 단일 처리기(invoke() 메서드로 라우팅합니다.

java.lang.reflect.Proxy.newProxyInstance(클래스로더 로더, Class[] 인터페이스, 호출핸들러 h) 메서드는 지정된 호출 처리기에 메서드 호출을 디스패치하는 지정된 인터페이스에 대한 프록시 클래스의 인스턴스를 반환합니다. . 별도로 취급할 가치가 있는 “특수 사례”의 두 종류가 있습니다. 첫 번째는 equals, hashCode 및 toString과 같은 제네릭 개체 메서드에 대한 호출입니다. 이러한 개체는 일반적으로 프록시의 ID를 나타내고 상태를 보유하는 일부 기본 “인스턴스” 개체로 전달하려고 합니다. 두 번째는 위에서 언급 한 대로 몇 가지 특별한 처리가 필요한 기본 메서드에 대한 호출입니다. 기본 메서드를 먼저 처리합니다. 프록시는 프록시 개체를 통해 간접적으로 발생하는 개체 메서드 호출을 강제로 수행하며, 프록시 개체는 프록시되는 기본 개체에 대한 대리 또는 대리자 역할을 합니다. 일반적으로 프록시 개체는 클라이언트 개체에 프록시 개체 인스턴스가 있다는 표시가 없도록 선언됩니다.

이 게시물에서는 프록시 디자인 패턴인 가장 간단하고 널리 사용되는 구조 설계 패턴을 살펴보겠습니다. 이 문서에서는 프록시 디자인 패턴을 이해하는 데 도움이 되는 실제 예제와 함께 프록시 디자인 패턴에 대한 개념과 프록시 디자인 패턴이 소프트웨어 개발자가 더 나은 소프트웨어를 빌드하는 데 어떻게 도움이 되는지 설명합니다. 아래 세그먼트는 이 패턴을 개념적으로 자세히 설명하여 프록시 디자인 패턴의 각 부분을 자세히 설명하여 더 나은 이해를 위해 설명합니다. 또한 Java 코드에서 프록시 디자인 패턴을 구현합니다. 이 항목은 리플렉션 클래스를 사용하거나 바이트 코드 조작을 사용하거나 동적으로 생성된 Java 코드를 컴파일해야 하기 때문에 고급 항목입니다. 또는 이 모든 것. 런타임 중에 아직 바이트 코드로 사용할 수 없는 새 클래스를 얻으려면 바이트 코드의 생성과 바이트 코드를 로드하는 클래스 로더가 필요합니다.