GuardingDynamicLinkerExporter

GuardingDynamicLinkerExporter (링커 자동 발견 공급자)

다른 언어 런타임에 의해 자동으로 로딩될 수 있는 가드형 동적 링커들의 공급자 역할을 하는 추상 클래스입니다. Supplier<List<GuardingDynamicLinker>>를 구현해요.

출처: Java API Reference

본문

자신의 링커를 외부 런타임에 공유하고 싶은 언어 런타임은 이 클래스를 상속해 Supplier.get()을 구현해 내보낼 링커 목록을 반환하고, 배포물(보통 JAR 파일)의 /META-INF/services/jdk.dynalink.linker.GuardingDynamicLinkerExporter 리소스에 하위 클래스를 선언해야 합니다. 그러면 다른 런타임의 동적 링커 팩토리가 ServiceLoader 메커니즘으로 이를 발견하고, 자신의 링커 목록에 포함시킬 수 있어요.

보안 관리자가 있을 때 이 클래스의 인스턴스 생성은 RuntimePermission("dynalink.exportLinkersAutomatically")에 대한 보안 검사가 연결되어 있습니다. 그래서 신뢰할 수 있는 런타임만 다른 런타임에 자신의 링커를 자동으로 내보낼 수 있게 해요.

이런 구조 덕분에 언어 런타임들은 서로의 존재를 알지 못해도, 표준 자바의 서비스 로딩 방식으로 서로의 링커를 찾아 활용할 수 있습니다. 예를 들어 A 언어 런타임이 B 언어 객체를 만났을 때 B의 링커가 자동으로 로딩되어 있어서 그 객체에 대한 호출도 처리할 수 있는 것이죠.

DynamicLinkerFactory.setClassLoader(ClassLoader)와 함께 쓰면 어떤 컨텍스트에서 어떤 링커가 보이는지도 조정할 수 있습니다. 이 잠금 장치 덕분에 링커를 공유하는 방식이 비교적 안전하게 유지됩니다.

필드와 생성자

  • AUTOLOAD_PERMISSION_NAME — 이 클래스의 인스턴스를 만드는 데 필요한 런타임 권한 이름입니다. 이 권한을 언어 런타임에 부여하면 다른 언어 런타임으로 자동 로딩되도록 링커를 내보낼 수 있어요.
  • GuardingDynamicLinkerExporter() — 보호된 생성자입니다. 보안 관리자가 설치되어 있으면 위 런타임 권한을 검사하며, 권한이 없으면 SecurityException이 발생합니다.

더 알아보기

Java 공식 API