我已经有一个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;