使用Spring的ComponentScan和PropertyPlaceholderConfigurer的自定义类加载器

时间:2017-01-10 02:01:18

标签: spring

我想在我的Tomcat应用程序中创建多个应用程序上下文。

其中一些应用程序上下文具有相同的包名和类名,但它们都引用不同的jar。

例如:

  

application0使用service.jar,model.jar

     

application1使用service-a.jar,model-a.jar

     

application2使用service-b.jar,model-b.jar

application0上下文正常,因为在orign项目中。

我将一些网页引用到自定义application1,我使用自定义类加载器来启动applicationContext。

File file0 = new File("D://git/project1/service-a.jar");
File file1 = new File("D://git/project1/modele-a.jar");

// convert the file to URL format
URL url0 = file0.toURI().toURL();
URL url1 = file1.toURI().toURL();

List<URL> urls = new LinkedList<>();

List<File> libs = listFilesForFolder(new File("D://protal//apache-tomcat-8.0.39//lib"));
for(File lib : libs) {
    urls.add(lib.toURI().toURL());
}

urls.add(url1);
urls.add(url0);

final URLClassLoader customClassLoader = new URLClassLoader(urls.toArray(new URL[urls.size()]));

ClassPathXmlApplicationContext context1 = new ClassPathXmlApplicationContext("applicationContext.xml") {
    protected void initBeanDefinitionReader(XmlBeanDefinitionReader reader)
    {
        super.initBeanDefinitionReader(reader);
        reader.setValidationMode(XmlBeanDefinitionReader.VALIDATION_NONE);

        reader.setBeanClassLoader(customClassLoader);
    }
};

allApplicationContexts.add(context1);

Spring上下文启动正常,但是它们无法创建组件扫描 bean, PropertyPlaceholderConfigurer 无效。其他一切似乎都是正确的。

我确定我的配置是正确的,因为它没有自定义类加载器。 Libs包含所有spring lib。

是否可以使用多个Spring上下文?

0 个答案:

没有答案