LinkerServices
LinkerServices (링커 서비스)
자신을 소유한 DynamicLinker가 GuardingDynamicLinker 인스턴스들에게 제공하는 서비스를 나타내는 인터페이스입니다. 링커들이 호출을 연결하는 과정에서 활용하는 여러 보조 기능을 담고 있어요.
본문
GuardingDynamicLinker가 링크를 만들 때 사용하는 다양한 유틸리티를 모아 둔 인터페이스입니다. 타입 변환, 타입 비교, 가드된 호출 재위임 같은 기능을 제공해 각 언어별 링커가 저수준 세부사항을 직접 구현하지 않아도 되게 해 줍니다.
주요 메서드
-
asType(MethodHandle handle, MethodType fromType)—MethodHandle.asType과 비슷하되, 사용 가능한 모든GuardingTypeConverterFactory구현이 만든 메서드 핸들도 연결해서 언어별 매개변수 타입 변환(coercion)을 적용합니다. 프리미티브 간·래퍼와 프리미티브·업캐스트 변환은MethodHandle.asType을 적용하고, 그 밖의 변환은MethodHandles.filterArguments등으로 처리해요. -
asTypeLosslessReturn(MethodHandle handle, MethodType fromType)—asType과 비슷하지만 반환 값 타입 변환을 특별히 다룹니다. 정밀도나 크기를 잃지 않는 변환만 적용해요. -
canConvert(Class<?> from, Class<?> to)— 요청한 타입 사이에 변환이 존재할 수 있으면(자동 JVM 변환이나 사용 가능한GuardingTypeConverterFactory가 제공하는 변환)true를, 확실히 존재하지 않으면false를 반환합니다. -
compareConversion(Class<?> sourceType, Class<?> targetType1, Class<?> targetType2)— 소스 타입에서 두 타깃 타입으로의 변환 중 어느 쪽이 선호되는지 결정합니다. -
getTypeConverter(Class<?> sourceType, Class<?> targetType)— 주어진 소스·타깃 타입 사이를 변환하는 메서드 핸들을 반환합니다. -
filterInternalObjects(MethodHandle target)— 런타임 내부 객체를 받을 수 있는 매개변수에 필터를 추가해(있다면 감싸서) 외부로 유출되지 않게 방지하도록 메서드 핸들을 수정합니다. -
getGuardedInvocation(LinkRequest linkRequest)— 이 링커 서비스 객체를 노출한DynamicLinker로 다시 위임하는 가드된 호출을 만듭니다. -
getWithLookup(Supplier<T> operation, SecureLookupSupplier lookupSupplier)— 특정MethodHandles.Lookup룩업 객체의 컨텍스트 안에서 주어진 연산을 실행합니다.