【发布时间】:2011-04-14 07:49:17
【问题描述】:
如何使用我自己的 ClassLoader 实例加载 Spring 上下文?
【问题讨论】:
标签: spring classloader
如何使用我自己的 ClassLoader 实例加载 Spring 上下文?
【问题讨论】:
标签: spring classloader
许多 Spring 上下文加载器(例如 ClassPathXmlApplicationContext ) 是DefaultResourceLoader 的子类。
DefaultResourceLoader 有一个constructor,您可以在其中指定类加载器,还有一个setClassLoader 方法。
所以你的任务是找到你需要的 Spring Context Loader 的构造函数,你可以在其中指定类加载器,或者只是创建它,然后使用集合来设置你想要的类加载器。
【讨论】:
final ClassLoader properClassLoader = YourClass.class.getClassLoader();
appContext = new ClassPathXmlApplicationContext("application-context.xml") {
protected void initBeanDefinitionReader(XmlBeanDefinitionReader reader) {
super.initBeanDefinitionReader(reader);
reader.setValidationMode(XmlBeanDefinitionReader.VALIDATION_NONE);
reader.setBeanClassLoader(properClassLoader);
setClassLoader(properClassLoader);
如果您出于 OSGI 目的执行此操作,请参见此处:How do I use a Spring bean inside an OSGi bundle?
【讨论】:
org.springframework.context.support.ClassPathXmlApplicationContext 课程在这里为您服务。
【讨论】:
正在使用spring boot并想使用自定义类加载器创建应用程序上下文的人可以这样做:
@SpringBootApplication
public class Application
{
public static void main(String[] args) {
SpringApplication app =
new SpringApplication(Application.class);
ResourceLoader resourceLoader = new DefaultResourceLoader();
YourClassLoaderObject yourClassLoaderObject = new YourClassLoaderObject();
((DefaultResourceLoader)resourceLoader).setClassLoader(yourClassLoaderObject);
app.setResourceLoader(resourceLoader);
context = app.run(args);
}
}
【讨论】: