Comment puis-je charger un contexte Spring avec mes propres données ? ClassLoader
instance ?
Réponses
Trop de publicités?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.
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 ?
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);
}
}