MyBatis 인터페이스의 간단 한 실현 원리 분석

MyBatis 3 를 사용 해 본 사람 은 왜 MyBatis 의 Mapper 인터페이스 에 실현 류 가 없다 고 생각 할 수 있 지만 직접 사용 할 수 있 습 니까?
그것 은 MyBatis 가 자바 동적 프 록 시 를 사용 하여 이 루어 진 인터페이스 이기 때문이다.
여기에 단지 간단 한 예 를 들 어 원 리 를 설명 할 뿐 완전히 MyBatis 를 겨냥 한 것 이 아니 라 이런 사상 은 우리 도 다른 곳 에 응용 할 수 있다.
인터페이스 정의

public interface MethodInterface { String helloWorld(); }
 동적 에이전트 인터페이스 구현

public class MethodProxy<T> implements InvocationHandler {
  private Class<T> methodInterface;
  public MethodProxy(Class<T> methodInterface) {
    this.methodInterface = methodInterface;
  }
  @Override
  public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
    System.out.println("=========================");
    System.out.println("   :" + method.getName());
    //              
    return null;
  }
}
여기 서 invoke 방법 에 대해 MyBatis 의 실현 원 리 를 간단하게 말 합 니 다.이 방법 에서 우 리 는 Method 를 통 해 인터페이스 와 방법 명 을 얻 을 수 있 습 니 다.인터페이스의 전체 이름 은 MyBatis XML 의 namespace 에 해당 하고 방법 명 은 구체 적 인 방법 중의 id 에 해당 합 니 다.즉,동적 대 리 를 통 해 SqlSession 을 통 해 namespace.id 방식 으로 해당 하 는 방법 을 호출 할 수 있다.인 터 페 이 스 를 사용 하 는 것 은 더욱 편리 하지만 간접 적 인 방식 이다.
동적 에이전트 공장 클래스

public class MethodProxyFactory {
  public static <T> T newInstance(Class<T> methodInterface) {
    final MethodProxy<T> methodProxy = new MethodProxy<T>(methodInterface);
    return (T) Proxy.newProxyInstance(
        Thread.currentThread().getContextClassLoader(), 
        new Class[]{methodInterface}, 
        methodProxy);
  }
}
이 공장 류 를 통 해 임의의 인터페이스의 동적 대리 류 를 생 성 할 수 있다.
테스트

MethodInterface method = MethodProxyFactory.newInstance(MethodInterface.class);
method.helloWorld();
총결산
일반적으로 동적 에이전트 에 대해 말하자면,우리 의 일반적인 용법 은 업무 처리,로그 또는 기록 방법의 집행 효율 등 방면 의 응용 이다.모두 실현 방법 에 대한 사전 또는 사후 처리 이다.
본 고 를 통 해 다른 응용 방향 을 볼 수 있다.그것 은 바로 유형 을 실현 할 필요 가 없고 동적 대 리 를 통 해 인터페이스 방법 을 직접 집행 하 는 것 이다.MyBatis 는 이런 방식 으로 우리 가 방법 을 호출 하 는 데 편 의 를 주 었 다.이런 사고방식 을 이용 하면 우 리 는 다른 측면 에서 더욱 좋 은 디자인 을 할 수 있 을 것 이다.
위 에서 말 한 것 은 편집장 이 여러분 에 게 소개 한 MyBatis 인터페이스의 간단 한 실현 원리 분석 입 니 다.여러분 에 게 도움 이 되 기 를 바 랍 니 다.궁금 한 점 이 있 으 시 면 저 에 게 메 시 지 를 남 겨 주세요.편집장 은 신속하게 답 해 드 리 겠 습 니 다!

좋은 웹페이지 즐겨찾기