我该如何使用自己的 ClassLoader
实例加载 Spring 上下文?
许多Spring上下文加载器(例如ClassPathXmlApplicationContext)都是DefaultResourceLoader的子类。
DefaultResourceLoader
有一个构造函数,您可以在其中指定类加载器,并且还有一个setClassLoader
方法。
因此,您的任务是找到所需的Spring上下文加载器的构造函数,您可以在其中指定类加载器,或者只需创建它并使用setClassLoader
方法来设置您想要的类加载器。
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目的而执行此操作,请参见此处:如何在OSGi捆绑包中使用Spring bean?
正在使用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);
}
}
org.springframework.context.support.ClassPathXmlApplicationContext
类在这里为您服务。