13 votes

Chargement du contexte Spring avec un classloader spécifique

Comment puis-je charger un contexte Spring avec mes propres données ? ClassLoader instance ?

14voto

Ralph Points 42744

De nombreux chargeurs de contexte de Spring (par exemple ClassPathXmlApplicationContext ) sont des sous-classes de DefaultResourceLoader .

DefaultResourceLoader a un Constructeur où l'on peut spécifier le chargeur de classe et où il y a également une fonction setClassLoader méthode.

C'est donc votre tâche de trouver un constructeur du Spring Context Loader dont vous avez besoin, où vous pouvez spécifier le classloader, ou simplement le créer, et ensuite utiliser le set pour définir le classloader que vous voulez.

6voto

user64141 Points 672
    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);

Voir ici si vous le faites à des fins OSGI : Comment utiliser un bean Spring dans un bundle OSGi ?

0voto

sebastiencol Points 113

El org.springframework.context.support.ClassPathXmlApplicationContext La classe est là pour vous.

0voto

Vishwas Upadhyay Points 116

Les personnes qui utilisent Spring Boot et veulent utiliser un classloader personnalisé pour créer un contexte d'application peuvent le faire comme suit :

@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);

    }

}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X