Class ClassInjector.UsingUnsafe.Factory

java.lang.Object
net.bytebuddy.dynamic.loading.ClassInjector.UsingUnsafe.Factory
Enclosing class:
ClassInjector.UsingUnsafe

@Enhance public static class ClassInjector.UsingUnsafe.Factory extends Object
A factory for creating a ClassInjector that uses sun.misc.Unsafe if available but attempts a fallback to using jdk.internal.misc.Unsafe if the jdk.internal module is not resolved or unavailable.
  • Field Details

  • Constructor Details

    • Factory

      public Factory()
      Creates a new factory for an unsafe class injector that uses Byte Buddy's privileges to accessing jdk.internal.misc.Unsafe if available.
    • Factory

      public Factory(ClassInjector.UsingUnsafe.Factory.AccessResolver accessResolver)
      Creates a new factory for an unsafe class injector.
      Parameters:
      accessResolver - The access resolver to use.
    • Factory

      Creates a new factory.
      Parameters:
      dispatcher - The dispatcher to use.
  • Method Details

    • resolve

      public static ClassInjector.UsingUnsafe.Factory resolve(Instrumentation instrumentation)
      Resolves an injection strategy that uses unsafe injection if available and also attempts to open and use jdk.internal.misc.Unsafe as a fallback. This method generates a new class and module for opening the internal package to avoid its exposure to any non-trusted code.
      Parameters:
      instrumentation - The instrumentation instance to use for opening the internal package if required.
      Returns:
      An appropriate injection strategy.
    • resolve

      public static ClassInjector.UsingUnsafe.Factory resolve(Instrumentation instrumentation, boolean local)
      Resolves an injection strategy that uses unsafe injection if available and also attempts to open and use jdk.internal.misc.Unsafe as a fallback.
      Parameters:
      instrumentation - The instrumentation instance to use for opening the internal package if required.
      local - false if a new class should in a separated class loader and module should be created for opening the jdk.internal.misc package. This way, the internal package is not exposed to any other classes within this class's module.
      Returns:
      An appropriate injection strategy.
    • isAvailable

      public boolean isAvailable()
      Returns true if this factory creates a valid dispatcher.
      Returns:
      true if this factory creates a valid dispatcher.
    • make

      public ClassInjector make(@MaybeNull ClassLoader classLoader)
      Creates a new class injector for the given class loader without a ProtectionDomain.
      Parameters:
      classLoader - The class loader to inject into or null to inject into the bootstrap loader.
      Returns:
      An appropriate class injector.
    • make

      public ClassInjector make(@MaybeNull ClassLoader classLoader, @MaybeNull ProtectionDomain protectionDomain)
      Creates a new class injector for the given class loader and protection domain.
      Parameters:
      classLoader - The class loader to inject into or null to inject into the bootstrap loader.
      protectionDomain - The protection domain to apply or null if no protection domain should be used.
      Returns:
      An appropriate class injector.