Как сделать загрузчик пользовательских классов для загрузки загрузчика классов Springboot - PullRequest
0 голосов
/ 30 июня 2019

У меня уже есть проект Java, в котором я создаю класс компонента в коде и использую ClassLoader для получения экземпляра созданного класса компонента.В этом случае я использую его и перехожу на валидатор Hibernate.Теперь я сделал этот проект как Springboot и выставил конечную точку REST.Но я не могу получить экземпляр компонента из загрузчика классов.Пакеты внутри компонента, который я создаю в коде, выдают ошибку «пакет не существует».Я узнал, что после определенной отладки мне нужно предоставить загрузчик классов для Springboot моему пользовательскому загрузчику классов.Как я могу это сделать?

Я пробовал, как показано ниже: (OfflineValidation является основным классом, который вызывает другой класс, в котором присутствует пользовательский загрузчик классов)

1) super(OfflineValidation.class.getClassLoader()); - Этоне работал

2) Thread.getContext().SystemLoader().getParent(); - не работал

classCode = javaCode;
            MemoryClassLoader classLoader = getMemoryClassLoaderInstance(
                    classCode, uniqueClassName);
            dynamicBeanObj = (DynamicBeanInterface) classLoader
                    .loadClass(uniqueClassName).newInstance();

Метод ниже возвращает мне экземпляр classLoader.Выше строки в другом методе, где я использую этот экземпляр.

private MemoryClassLoader getMemoryClassLoaderInstance(
            final String classCode, final String uniqueClassName)
            throws java.security.PrivilegedActionException {
        MemoryClassLoader classLoader = null;
        classLoader = AccessController.doPrivileged(
                new PrivilegedExceptionAction<MemoryClassLoader>() {

                    public MemoryClassLoader run() throws IOException {
                        return new MemoryClassLoader(uniqueClassName,
                                classCode);
                    }
                });
        return classLoader;
    }

Когда я запускаю приложение sprintboot, приложение работает, но динамическийBean, который создается, дает для пакетов ниже, поскольку не существует.У меня есть зависимость POM, но я думаю, что Springboot также имеет свой собственный загрузчик классов, и, как я создал собственный ClassLoader, как я могу дать ссылку на springboot classLoader для моего classLoader

import javax.validation.constraints.Size;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Pattern;
...