динамически загружать реализацию интерфейса в Java - PullRequest
0 голосов
/ 18 октября 2010

Мне нужна функциональность в Java, аналогичная .NET Managed Extensibility Framework (http://mef.codeplex.com/). Для тех, кто не знает MEF, я хочу что-то вроде этого:

Учитывая интерфейс

public interface IFoo {
 ...
}    

Динамически загружать реализацию интерфейса, просматривая загруженные файлы jar.

IFoo foo = loadClassThatImplementsInterface<IFoo>();

Дело в том, что программист не знает имя реализации во время кода, но предоставляет в коде точку расширения.

Разве это не возможно в Java вообще? Я нашел несколько обращений Google, утверждающих, что это невозможно, но это кажется немного ... а?

Существует множество примеров использования загрузчика классов, когда полное имя реализации известно во время компиляции. Это не то, что я хочу.

Ответы [ 2 ]

4 голосов
/ 18 октября 2010

В «чистой» Java вы можете использовать ServiceLoader: http://download.oracle.com/javase/6/docs/api/java/util/ServiceLoader.html

Вы просто предоставляете метаданные в своем банке расширения, это удобно и легко расширяется.

Или ищите DI-фреймворк, такой как Guice или Spring ...

0 голосов
/ 18 октября 2010

Вполне возможно, с loadClassThatImplementsInterface(IFoo.class).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...