问题
How can I go about loading a Spring context with my own ClassLoader instance?
回答1:
Many Spring Context Loader (for example ClassPathXmlApplicationContext ) are subclass of DefaultResourceLoader.
DefaultResourceLoader has a constructor where you can specify the Classloader and also has a setClassLoader method.
So it is your task to find a constructor of the Spring Context Loader you need, where you can specify the classloader, or just create it, and then use the set to set the classloader you want.
回答2:
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);
See here if you are doing this for OSGI purposes: How do I use a Spring bean inside an OSGi bundle?
回答3:
The org.springframework.context.support.ClassPathXmlApplicationContext class is here for you.
来源:https://stackoverflow.com/questions/5660115/loading-spring-context-with-specific-classloader