Динамическая загрузка и выгрузка плагинов во время исполнения программы (Java)?
Наследуете URLClassLoader, останется сказать откуда брать классы. При загрузке плагина создаёте новый класслоадер и заносите его в свой список доступных класслоадеров, при выгрузке — удаляете из списка.

Когда надо что то сделать ищете (уже не знаю что именно вам нужно — по имени плагина? класса?) нужный класслоадер у себя в списке и создаёте оттуда инстанс нужного класса.

Список класслоадеров держите у себя где нибудь — ServletContext или что нибудь такое

В сети есть не мало статей на эту тему
Что бы гибко управлять плагинами лучше использовать OSGi, как тут уже советовали.