/** * Load a class generated by ByteBuddy. * * @param referenceClass The main class to proxy - might be an interface. * @param makeClassFunction A function building the class. * @return The loaded generated class. */ public Class<?> load(Class<?> referenceClass, Function<ByteBuddy, DynamicType.Builder<?>> makeClassFunction) { return make( makeClassFunction.apply( byteBuddy ) ) .load( referenceClass.getClassLoader(), resolveClassLoadingStrategy( referenceClass ) ) .getLoaded(); }
private Class<?> load(Class<?> referenceClass, TypeCache<TypeCache.SimpleKey> cache, TypeCache.SimpleKey cacheKey, Function<ByteBuddy, DynamicType.Builder<?>> makeProxyFunction) { return cache.findOrInsert( referenceClass.getClassLoader(), cacheKey, () -> make( makeProxyFunction.apply( byteBuddy ) ) .load( referenceClass.getClassLoader(), resolveClassLoadingStrategy( referenceClass ) ) .getLoaded(), cache ); }
public static <E> E createInstance(Class<E> entityClass) { Class<? extends E> loaded = new ByteBuddy() .subclass( entityClass ) .method( ElementMatchers.named( "toString" ) ) .intercept( FixedValue.value( "transformed" ) ) .make() // we use our internal helper to get a class loading strategy suitable for the JDK used .load( entityClass.getClassLoader(), resolveClassLoadingStrategy( entityClass ) ) .getLoaded(); try { return loaded.newInstance(); } catch (Exception e) { throw new RuntimeException( "Unable to create new instance of " + entityClass.getSimpleName(), e ); } }
/** * Load a class generated by ByteBuddy. * * @param referenceClass The main class to proxy - might be an interface. * @param makeClassFunction A function building the class. * @return The loaded generated class. */ public Class<?> load(Class<?> referenceClass, Function<ByteBuddy, DynamicType.Builder<?>> makeClassFunction) { return make( makeClassFunction.apply( byteBuddy ) ) .load( referenceClass.getClassLoader(), resolveClassLoadingStrategy( referenceClass ) ) .getLoaded(); }
private Class<?> load(Class<?> referenceClass, TypeCache<TypeCache.SimpleKey> cache, TypeCache.SimpleKey cacheKey, Function<ByteBuddy, DynamicType.Builder<?>> makeProxyFunction) { return cache.findOrInsert( referenceClass.getClassLoader(), cacheKey, () -> make( makeProxyFunction.apply( byteBuddy ) ) .load( referenceClass.getClassLoader(), resolveClassLoadingStrategy( referenceClass ) ) .getLoaded(), cache ); }