2011-04-14 98 views

回答

12

许多Spring上下文加载器(例如ClassPathXmlApplicationContext )是DefaultResourceLoader的子类。

DefaultResourceLoader有一个constructor您可以指定类加载器,也有一个setClassLoader方法。

因此,您的任务是找到您需要的Spring上下文加载器的构造函数,您可以在其中指定类加载器,或者只是创建它,然后使用该集来设置所需的类加载器。

0

org.springframework.context.support.ClassPathXmlApplicationContext班是在这里为你。

+0

该类不会让你的类加载器通过。这不是一个正确的答案。 – JustinKSU 2016-03-29 19:22:20

+0

ClassPathXmlApplicationContext是DefaultResourceLoader的子类,它继承了setClassloader方法。所以你可以通过你的类加载器。 – sebastiencol 2016-04-04 12:30:09

+0

这是真的,但你不会继承构造函数。你只能使用类中声明的(https://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/context/support/ClassPathXmlApplicationContext.html) – JustinKSU 2016-04-04 16:51:33

5
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?

+0

我也需要这样做在Jenkins插件中加载spring上下文。 – Dana 2016-01-27 20:20:25

相关问题