에이전트 모드
프록시 모델은 영어로 프록시 또는 대리라고하며 둘 다 중국어로 "에이전트"로 번역 될 수 있습니다. 소위 대리는 한 사람이나 기관이 다른 사람이나 다른 기관을 대신하여 조치를 취한다는 것을 의미합니다. 경우에 따라 클라이언트가 객체를 원하거나 직접 참조 할 수 없으며 프록시 객체는 클라이언트와 대상 객체 사이의 중개자 역할을 할 수 있습니다.
A. 초록 테마 역할
실제 주제를 사용할 수 있도록 실제 주제와 프록시 주제 사이의 공통 인터페이스를 선언합니다.
B. 프록시 역할 :
에이전트 테마 역할에는 실제 주제에 대한 참조가 포함되어 있으므로 실제 주제 객체는 언제든지 작동 할 수 있습니다. 에이전트 테마 역할은 실제 주제 역할과 동일한 인터페이스를 제공하므로 실제 주제를 언제라도 실제 주제에 대한 참조 제어로 대체 할 수 있으며 필요할 때 실제 주제 객체 (및 실제 주제 객체 삭제)를 작성해야합니다. 에이전트 역할은 일반적으로 클라이언트 호출을 단순히 실제 주제 객체로 전달하는 대신 클라이언트 호출을 실제 주제로 전 또는 후에 수행하는 작업을 수행합니다.
C. 실제 테마 역할
프록시 역할로 표시되는 실제 객체를 정의합니다
예를 들어:
동적 프록시 모드를 사용한 리팩토링
JDK 동적 프록시
대상 클래스 인터셉터 프록시 클래스
요약 : 1. JDKPROXY에 의해 생성 된 프록시 클래스는 인터페이스를 구현하기 때문에 대상 클래스의 모든 메소드는 프록시 클래스에 포함됩니다.
2. 생성 된 프록시 클래스의 모든 방법은 대상 클래스의 모든 방법을 가로 채립니다. 인터셉터에서 호출 메소드의 내용은 프록시 클래스의 각 방법의 구성입니다.
3. JDKPROXY를 사용할 때는 인터페이스가 존재해야합니다.
4. 호출 메소드의 세 매개 변수는 호출 된 메소드의 API, 호출 된 메소드의 매개 변수 및 대상 클래스의 호출 된 메소드의 리턴 유형에 액세스 할 수 있습니다.
JDK 동적 프록시 모드로 리팩토링
JDK 동적 프록시 모드를 사용하여 최대 절전 모드 트랜잭션 재구성
CGLIB 동적 프록시
1. CGLIB는 강력하고 고성능이며 고품질 코드 생성 클래스 라이브러리입니다. 런타임 중에 Java 클래스를 확장하고 Java 인터페이스를 구현할 수 있습니다.
2. CGLIB를 사용하여 대상 클래스의 서브 클래스로 프록시 클래스를 생성하십시오.
3. cglib를 사용하여 프록시 클래스를 생성하는 데 인터페이스가 필요하지 않습니다.
4. CGLIB에 의해 생성 된 프록시 클래스는 상위 클래스의 방법을 무시합니다.
5. 인터셉터의 인터셉트 메소드의 내용은 프록시 클래스의 방법 본문입니다.
CGLIB 동적 프록시 모드를 사용한 최대 절전 모드를 리팩토링합니다
스프링 두 개의 프록시 방법
1. 대상 객체가 여러 인터페이스를 구현하는 경우 Spring은 JDK의 java.lang.reflect.proxy 클래스 프록시를 사용합니다.
장점 : 인터페이스가 있기 때문에 시스템이 더 느슨하게 결합됩니다. 단점 : 각 대상 클래스에 대한 인터페이스를 만듭니다.
2. 대상 객체가 인터페이스를 구현하지 않으면 Spring은 CGLIB 라이브러리를 사용하여 대상 객체의 서브 클래스를 생성합니다.
장점 : 프록시 클래스와 대상 클래스가 상속되기 때문에 인터페이스가 존재할 필요가 없습니다.
단점 : 인터페이스가 사용되지 않기 때문에 시스템의 결합은 JDK를 사용하는 동적 프록시만큼 좋지 않습니다.
위는이 기사의 모든 내용입니다. 모든 사람의 학습에 도움이되기를 바랍니다. 모든 사람이 wulin.com을 더 지원하기를 바랍니다.