Есть ли способ скомпилировать и загрузить класс Java во время выполнения без создание и сохранение файла в файловой системе операционной системы?Динамическая загрузка классов с использованием только строки
Скажем, у меня есть запись базы данных, которая содержит строковое представление класса java. Я вытаскиваю эту строку в память Java. Моя цель - скомпилировать эту строку в класс java, а затем загрузить этот класс.
Позвольте мне пояснить это. Я не хочу иметь ничего общего с файлами .java или .class в любой операционной системе.
Возможно ли это? И как?
Например, вот код для загрузки Groovy класса во время выполнения, и вызвать метод:
ClassLoader parent = getClass().getClassLoader();
GroovyClassLoader loader = new GroovyClassLoader(parent);
Class groovyClass = loader.parseClass(new File("src/test/groovy/script/HelloWorld.groovy"));
// let's call some method on an instance
GroovyObject groovyObject = (GroovyObject) groovyClass.newInstance();
Object[] args = {};
groovyObject.invokeMethod("run", args);
, но мы можем сделать что-то вроде:
ClassLoader parent = getClass().getClassLoader();
GroovyClassLoader loader = new GroovyClassLoader(parent);
Class groovyClass = loader.parseClass(new String("public class GroovyClass{}"));
?
Я ничего не знаю о ответе, но интересуюсь случаем использования. Какую проблему вы пытаетесь решить этим. – RandomQuestion
Вот проблема: я создаю студию управления базой данных для базы данных объектов (используя db4o). Скажите, что пользователь студии хочет переключать базы данных. С помощью базы данных Object классы java представляют собой представление таблиц/схем и т. Д. Поэтому, когда вы переключаете базы данных, вам приходится динамически загружать новые классы Java в память, потому что эти классы необходимы для описания базы данных. Скажем, пользователь хочет добавить новую запись. Им нужно вызвать Class.newInstance() для определенного И существующего Java-класса, который уже загружен в JVM. –
Ответ на этот код может быть очень длинным, но вот моя ссылка, когда у меня был тот же случай. [Компиляция в памяти] (http://www.javablogging.com/dynamic-in-memory-compilation/). –