>Java >java지도 시간 >Java 정적 프록시 및 동적 프록시 심층 학습

Java 정적 프록시 및 동적 프록시 심층 학습

黄舟
黄舟원래의
2016-12-12 13:24:501779검색

1. 프록시 패턴은 일반적으로 사용되는 Java 디자인 패턴으로 프록시 클래스와 위임 클래스가 동일한 인터페이스를 갖는다는 점입니다. 프록시 클래스는 주로 위임 클래스에 대한 메시지 처리를 담당합니다. , 메시지 필터링, 대리자 클래스에 메시지 전달, 메시지 후처리 등.
일반적으로 프록시 클래스와 대리자 클래스 간에는 연관이 있습니다. 프록시 클래스의 객체는 대리자 클래스의 객체와 연관되어 있으며 실제로 서비스를 구현하지는 않지만 호출을 통해 연관됩니다. 특정 서비스를 제공하는 대리자 클래스의 개체입니다.
에이전트 생성 시기에 따라 에이전트 클래스는 두 가지 유형으로 나눌 수 있습니다.
정적 프록시: 프로그래머나 특정 도구에 의해 생성되며 자동으로 소스 코드를 생성한 후 컴파일합니다. 프로그램이 실행되기 전에 프록시 클래스의 .class 파일이 이미 존재합니다.
동적 프록시: 프로그램이 실행될 때 반사 메커니즘을 사용하여 동적으로 생성됩니다.

2. 단일 정적 프록시


码如下:
public interface CountDao 
{ 
// 查看账户方法 
public void queryCount(); 
} 
public class CountDaoImpl implements CountDao 
{ 
public void queryCount() 
{ 
System.out.println("查看账户方法..."); 
} 
} 
public class CountTrancProxy implements CountDao 
{ 
private CountDao countDao; 
public CountProxy(CountDao countDao) 
{ 
this.countDao = countDao; 
} 
@Override 
public void queryCount() 
{ 
System.out.println("tranc start"); 
countDao.queryCount(); 
System.out.println("tranc end"); 
} 
} 
public class TestCount 
{ 
public static void main(String[] args) 
{ 
CountTrancProxy countProxy = new CountTrancProxy(new CountDaoImpl()); 
countProxy.updateCount(); 
} 
}
거래 시작

계좌 방법 보기...
거래 종료
3. 다중 정적 프록시
위 코드를 바탕으로 새로운

码如下:
public class CountLogProxy implements CountDao 
{ 
private CountDao countDao; 
public CountLogProxy(CountDao countDao) 
{ 
this.countDao = countDao; 
} 
@Override 
public void queryCount() 
{ 
System.out.println("Log start"); 
countDao.queryCount(); 
System.out.println("Log end"); 
} 
}
로그 시작

거래 처리 전
계좌 방식 보기...
거래 처리 후
로그 종료
4. 요약
사실 프록시 클래스는 상속이나 인터페이스 구현을 통해 프록시의 효과를 얻을 수 있습니다. 그러나 여러 프록시 클래스를 서로 결합해야 하는 경우 상속은 유연하지 않으며 이를 사용해야 합니다. 클래스는 지속적으로 재작성되며, 집계를 통해 프록시 클래스를 결합하는 방법은 매우 쉽습니다.



성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.