2010-10-18 8 views
0

Je recherche une fonctionnalité Java similaire à .NET Managed Extensibility Framework (http://mef.codeplex.com/). Pour ceux qui ne connaissent pas MEF, je veux quelque chose comme ceci:charger dynamiquement l'implémentation de l'interface en Java

Compte tenu d'une interface

public interface IFoo { 
... 
}  

charge une implémentation Dynamiquement d'une interface en regardant dans des bocaux chargés.

IFoo foo = loadClassThatImplementsInterface<IFoo>(); 

Le point est que le programmeur ne connaît pas le nom de la mise en œuvre à l'heure du code, mais fournit en code un point de extentsion.

Cela n'est-il pas possible du tout en Java? J'ai trouvé quelques résultats de Google indiquant que ce n'était pas possible, mais cela semble un peu ... hein?

Il existe de nombreux exemples d'utilisation d'un chargeur de classe lorsque le nom complet de l'implémentation est connu au moment de la compilation. Ce n'est pas ce que je veux.

Répondre

4

Dans « pur » Java, vous pouvez utiliser ServiceLoader: http://download.oracle.com/javase/6/docs/api/java/util/ServiceLoader.html

Vous fournissez simplement des méta-données dans votre pot d'extension, qui est facilement extensible et intelligent.

Ou chercher un cadre de DI comme Guice ou au printemps ...

+0

Pour ce projet, je ne veux pas utiliser un cadre DI, donc je vais regarder dans ServiceLoader, merci –

+0

Ok, n'oubliez pas d'accepter la réponse si c'est ce que vous cherchiez ;-) thx –

+0

Found this après savoir ce qu'il faut rechercher: http://java.dzone.com/news/simple-dependency-injection-wi –

0

Il est tout à fait possible, avec un loadClassThatImplementsInterface(IFoo.class).