>  기사  >  Java  >  Java의 동적 프록시 적용에 대한 자세한 설명

Java의 동적 프록시 적용에 대한 자세한 설명

黄舟
黄舟원래의
2017-09-14 10:44:541304검색

이 글은 Java 동적 프록시의 구현과 적용을 자세히 설명하는 관련 정보를 주로 소개합니다. 이 글을 통해 누구나 Java 동적 프록시의 사용법을 이해하고 숙달할 수 있기를 바랍니다.

자세한 설명을 참조하세요. Java 동적 프록시 구현 및 응용 프로그램

Java 동적 프록시는 실제로 일상적인 비즈니스 코드를 작성할 때 일반적으로 사용되지 않지만 프레임워크 계층에서 RPC 프레임워크의 클라이언트와 작업하는 것은 매우 일반적이고 중요합니다. Spring의 핵심 아이디어와 AOP의 기본 원리 구현은 Java의 동적 프록시 기술을 사용합니다.

프록시를 사용하면 객체의 원격 호출과 AOP 구현을 실현할 수 있습니다.

Java의 동적 프록시 구현은 주로 InvoctionHandler(인터페이스) 및 Proxy(클래스)에 의존합니다.

다음은 예시입니다

구현된 에이전트에는 일반적으로 인터페이스가 필요합니다


package com.yasin.ProxyLearn;

public interface IStudy {

  public void learn();

  public String getKonwledge();

}

인터페이스를 구현하는 클래스


package com.yasin.ProxyLearn;

public class Study implements IStudy{

  public void learn() {
    System.out.println("我要开始学习了!");
  }

  public String getKonwledge() {

    return "Java真的强";
  }

}

InvacationHandler 인터페이스를 구현해야 하는 Agent 클래스


package com.yasin.ProxyLearn;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;

public class StudyProxy implements InvocationHandler{

  //真实要被代理的对象
  private Object study;

  public StudyProxy(Object study){
    this.study=study;
  }

  /**
   * 当被代理对象执行自己的方法时,便会执行这个方法
   */
  public Object invoke(Object object, Method method, Object[] args) throws Throwable {

    Object obj=null;

    System.out.println("代理执行前我可以执行一些操作");

    //执行被代理对象的方法
    obj = method.invoke(study, args);


    System.out.println("代理执行后我还可以执行一些操作");

    return obj;
  }

}

테스트 클래스


package com.yasin.JavaLearn;

import java.lang.reflect.Field;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.log4j.Logger;
import org.apache.log4j.PropertyConfigurator;
import org.apache.log4j.xml.DOMConfigurator;

import com.yasin.ProxyLearn.IStudy;
import com.yasin.ProxyLearn.Study;
import com.yasin.ProxyLearn.StudyProxy;

/**
 * Hello world!
 *
 */
public class App {

  public static void main(String[] args) {

    IStudy study = new Study();

    InvocationHandler handler = new StudyProxy(study);

    IStudy proxyStudy =(IStudy)Proxy.newProxyInstance(Thread.currentThread().getContextClassLoader(), new Class[] {IStudy.class}, handler);

    proxyStudy.learn();

    System.out.println(proxyStudy.getKonwledge());

  }
}

위는 Java 동적 프록시의 기본 사용입니다. Spring AOP 및 RPC 원격 서버 구현은 이보다 더 복잡하며 이에 대해서는 나중에 자세히 설명합니다.

위 내용은 Java의 동적 프록시 적용에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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