Загрузка Java-байт-кода во время выполнения - PullRequest
8 голосов
/ 04 июля 2010

Я получил некоторый java-байт-код (скомпилированный java-source), который генерируется в моей программе. Теперь я хочу загрузить этот байт-код в текущую запущенную Java-VM и запустить определенную функцию. Я не уверен, как это сделать, я немного покопался в Java Classloaders, но не нашел прямого пути.

Я нашел решение, которое использует файл класса на жестком диске, но полученный мной байт-код находится в массиве байтов, и я не хочу записывать его на диск, а использую его напрямую.

Спасибо!

Ответы [ 2 ]

10 голосов
/ 04 июля 2010

вам нужно написать собственный загрузчик классов, который перегружает метод findClass

2 голосов
/ 04 июля 2010

Если байт-код отсутствует в пути к классу запущенной программы, вы можете использовать URLClassLoader.От http://www.exampledepot.com/egs/java.lang/LoadClass.html

// Create a File object on the root of the directory containing the class file
File file = new File("c:\\myclasses\\");

try {
    // Convert File to a URL
    URL url = file.toURL();          // file:/c:/myclasses/
    URL[] urls = new URL[]{url};

    // Create a new class loader with the directory
    ClassLoader cl = new URLClassLoader(urls);

    // Load in the class; MyClass.class should be located in
    // the directory file:/c:/myclasses/com/mycompany
    Class cls = cl.loadClass("com.mycompany.MyClass");
} catch (MalformedURLException e) {
} catch (ClassNotFoundException e) {
}
...