MyBatis 인터페이스의 간단 한 실현 원리 분석
그것 은 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 인터페이스의 간단 한 실현 원리 분석 입 니 다.여러분 에 게 도움 이 되 기 를 바 랍 니 다.궁금 한 점 이 있 으 시 면 저 에 게 메 시 지 를 남 겨 주세요.편집장 은 신속하게 답 해 드 리 겠 습 니 다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
MySQL/마이바티스 | 동적 쿼리 사용A라는 서비스에 해당하는 테이블을 조인하고 조회하는 데 사용됩니다. 나중에 공통화를 위해 B 및 C 서비스도 추가됩니다. A, B, C 서비스는 모두 단일 쿼리에서 작동할 수 있도록 공통화되어야 합니다. 테이블에 각...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.