如何使自定义类加载器加载springboot类加载器

时间:2019-06-30 07:45:07

标签: java spring-boot classloader javabeans

我已经有一个Java项目,其中我在代码中创建了一个bean类并使用ClassLoader来获取创建的bean类的实例。我正在使用此实例并将其传递给Hibernate验证程序。现在,我将该项目作为springboot进行了开发,并公开了REST端点。但是我无法从类加载器中获取bean的实例。我在代码中创建的Bean内的软件包给出错误“软件包不存在”。我知道在进行某些调试后,我需要向我的自定义类加载器提供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应用程序时,应用程序启动,但是创建的dynamicBean提供了以下软件包,因为它们不存在。我有pom依赖关系,但是我认为springboot也带来了它自己的classloader,并且当我创建了自定义的ClassLoader时,如何将springboot classLoader的引用提供给classLoader

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

0 个答案:

没有答案