2009-02-05 6 views
1

Est-il possible d'utiliser un conteneur Spring pour DI à partir de plugins Eclipse?Est-il possible d'utiliser Spring dans les plugins Eclipse?

Je me demande parce que je sais que Eclipse provoque beaucoup de problèmes avec le chargement des classes, à la recherche des choses dans le plug-in, etc.

Le plugin est destiné à être distribué comme un fichier JAR.

Répondre

1

La réponse est oui. Vous pouvez utiliser Spring DM, mais vous n'êtes pas obligé de le faire. C'est probablement mieux avec ça.

Je l'ai fait sans Spring DM et la principale préoccupation est les problèmes de chargement de classe (pas sûr si Spring DM les résout, mais je suppose que cela devrait). En supposant que vous regroupiez le Spring JAR dans un plugin séparé avec des dépendances, vous devrez charger le contexte avec le chargeur de classe du plugin appelant.

Exemple:

  • Plugin A - votre plugin fonctionnel
  • Plugin B - Le plug-in Spring plug-in lib exporter les paquets de printemps

A dépend de B. Lorsque l'extension A démarre, il va charger le contexte de l'application, lorsque vous appelez cette charge, vous devrez faire quelque chose comme:

Thread.currentThread().setContextClassLoader(PluginAActivator.class.getClassLoader()) 

Pour que le chargement des classes se fasse sous votre propre chargeur de classe. Vous pouvez maintenant utiliser un ClassPathXmlApplicationContext pour charger les XML de configuration à partir de votre chemin de classe.

Une petite note: la valeur par défaut ClassPathXmlApplicationContext valide vos XML lors du chargement. Vous pouvez le désactiver ou pointer vos XML vers un schéma local (plutôt que le schéma Spring standard sur springframework.org), sinon, vous vous connecterez à Internet pour télécharger les fichiers de schéma lors du chargement et travailler hors connexion échouera.

+0

Il existe de nombreux domaines dans lesquels l'utilisation de Spring Spring à l'intérieur d'OSGi peut vous causer de la douleur. Je vous recommande fortement de passer à Spring DM si vous prévoyez de continuer à utiliser Spring avec OSGi. – SteveD

+0

Vous n'aurez pas besoin de gérer le chargeur de classe de contexte dans le code si vous utilisez Spring DM et que vous ne créerez plus manuellement les contextes d'application. – SteveD

+0

Un certain temps s'est écoulé depuis que j'ai écrit cette réponse. En effet, Spring OSGi (anciennement Spring DM) fournit tout ce dont vous avez besoin dans un package soigné, y compris un contexte d'application qui fonctionne sans problème et la possibilité d'exposer les services OSGi en les définissant dans vos XML Spring. Essaie. – zvikico

0

Avez-vous un exemple de code pour votre article? Ce serait génial, puisque je traîne avec ça pendant un moment.

À la votre!

+0

Ne soyez pas paresseux - le site Spring fait un bon travail de documentation de leurs bibliothèques. – SteveD

Questions connexes