2011-04-14 102 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

相關問題