OkHttp 소스 책임 체인 분석

1307 단어

책임 체인 모델의 운용

public interface Interceptor {

  Response intercept(Chain chain) throws IOException;

  interface Chain {
    Request request();
    Response proceed(Request request) throws IOException;
  }
}
  • 1.Chain 대상을 실례화하고, 구조기에서 차단기를 전송하는 그룹을 만들고proceed 방법
  • 을 호출합니다
        Interceptor.Chain chain = new RealInterceptorChain(interceptors);
        chain.proceed(....,index = 0)
    
  • 2.chain의proceed () 방법에서 새로운Chain 대상을 구축하고 차단기 그룹의 차단기를 가져오며 새로 구성된Chain 대상을 차단기의intercept () 방법
  • 에 전송합니다
     public Response proceed(Request request, StreamAllocation streamAllocation, HttpCodec httpCodec,int index) {
          
        //  , 1 
        RealInterceptorChain next = new RealInterceptorChain(interceptors[index + 1], request);
        Interceptor interceptor = interceptors.get(index);
        Response response = interceptor.intercept(next);
    
        return response;
      }
    
  • 3.차단기의intercept 방법에서chain을 호출합니다.proceed () 방법은 두 번째 단계로 돌아가서 하나의 Chain 대상을 다시 실례화하여 구조기 그룹에 있는 index+1 차단기를 전송하고 인터셉트 그룹의 차단기가 실행될 때까지 계속 실행합니다.마지막 Chain 객체는 proceed() 메서드를 더 이상 실행하지 않습니다.
  • @Override 
    public Response intercept(Chain chain) {
    
        Reponse networkResponse = chain.proceed(networkRequest);
    
        return networkResponse;
    
    }
    

    좋은 웹페이지 즐겨찾기