динамически загружаемые классы, поэтому методы этих классов не отображаются в интерфейсе. Однако при активной загрузке и использовании таких классов ошибок не возникает.
В проекте требуется реализовать горячую перезагрузку и внедрение классов или экземпляров. Например, есть утилитный класс TestUtil
, который компилируется в JAR-файл и затем может использоваться динамически через интерфейс magic-api. В настоящее время используется URLClassLoader
для загрузки этого класса, после чего он внедряется как bean в Spring. Однако из-за проблемы с загрузкой классов, динамически загружаемый класс недоступен. Конкретный код представлен ниже.
// В другом проекте этот утилитный класс собирается в JAR-файл и помещается в указанную директорию, а затем magic-api проект загружает этот JAR
@Component
public class TestUtil {
public static String action(String msg) {
return msg;
}
public static String action() {
return "123asd";
}
}
Ниже приведен процесс динамической загрузки JAR-файла
public class PluginImportBeanDefinitionRegistrar implements ImportBeanDefinitionRegistrar, EnvironmentAware {
@Override
public void registerBeanDefinitions(AnnotationMetadata importingClassMetadata, BeanDefinitionRegistry registry) {
String path = "file:///C:/Users/keWangCheng/Desktop/xiangMu/classLoaderDemo/jarLib/Util.jar";
String cls = "org.classloaderdemo.demoutil.util.TestUtil";
URLClassLoader classLoader = new URLClassLoader(new URL[] { new URL(path) });
Class<?> clazz = classLoader.loadClass(cls);
// регистрация bean
registerBean(clazz, registry);
}
}
Используется ли неправильный загрузчик классов или требуются какие-либо действия? Прошу указаний.