Jak zrobić własny system wtyczek

0

Poszukuje informacji na temat napisania własnego systemu wtyczek.
Znalazłem już ServiceLoader i ClassLoader tylko nie bardzo wiem jak to użyć.
Prosił bym o jakieś sugestie

0

Czytaj tu:
http://jpf.sourceforge.net/
ablo tu
http://stackoverflow.com/questions/1613935/java-plugin-framework-choice

a poza tym to refleksja refleksja refleksja i jeszcze raz refleksja :)

0

To że istnieją frameworki do tego to wiem mnie bardziej interesuje jak to zrobić albo jak za pomocą load service wczytać klase z pliku jar w danym katalogu np. /lib/my.jar

0

No to też Ci napisałem refleksja refleksja refleksja - to taka technologia, a właściwie mechanizm refleksji. Pozwala Ci wywoływać metody pewnych klas (takich jak sobie tam wybierzesz) na obiektach (na obiektach mam namyśli obiektach klasy Object nie zadeklarowanych jako przedstawiciele tych klas).
Dowolną klasę możesz załadować i utworzyć instancje podając nazwę klasy np.

Class.forName((String) s) // gdzie s jest nazwą klasy formatu package.subpackage...... subsubsubpackage.className

zwraca Ci to to obiekt typu Class. A z nim możesz sobie np zrobić Class#newInstance() - w ten sposób utworzysz nowy obiekt klasy Class. Możesz sobie go teraz rzutować na co chcesz i wywoływać jak normalny inny obiekt, albo korzystając z mechanizmu refleksji wywoływać metody klasy className na obiekcie typu który Ci Class.forName() zwróciło;
Troszkę to zawiłe i myślę, że nie zrozumiesz mnie, bo za ciekawie tego nie wytłumaczyłem :) poczytaj troszkę (poważnie troszkę bo to wystarczy) o mechanizmie refleksji.

Jak to się ma do wtyczek? Ano masz swoje tam API zawierające jakieś interfejsy. Wiesz, że wtyczki muszą implementować któreś z nich. Potem ładujesz wszystkie klasy z katalogu wtyczek, i wiesz, że one powinny implementować twoje interfejsy, dzięki czemu możesz wywoływać na utworzonych obiektach po przez newInstance() metody tych interfejsów. W ten sposób Twój program pracuje z wtyczkami.

0

Sorry nie zaskoczyłem mój błąd. A jakiś Tutoriale bo ten na Oracle to żenada lubię mieć wytłumaczone po chłopsku a najlepiej jeszcze po polsku

0

Dobra mam coś takiego
Interfejs:

public interface Plugin {
	public String hello();
}

Plugin:

public class MyPlugin implements Plugin{
	public String hello(){
		return "Hello World";
	}
}

Program główny:

public class Reflection {
	public static void main(String[] args) {
		try {
			Plugin plugin = (Plugin) Class.forName("MyPlugin").newInstance();
			System.out.println(plugin.hello());
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

}

Co teraz użyć aby zamiast MyPlugin podać ścieżkę do pliku. Myślę nad ClassLoader ale nie jestem pewien;

0

hmmm URLClassLoader.findClass?

1 użytkowników online, w tym zalogowanych: 0, gości: 1