Найдите шаблон проектирования AbstractFactory, «Внедрение зависимостей» и «Инверсия управления». Мартин Фаулер пишет об этих здесь .
Вкратце, вы отправляете файлы JAR со всеми необходимыми компонентами. Для каждой точки обслуживания, которую можно настроить, вы определяете интерфейс для службы. Затем вы пишете одну или несколько реализаций этого интерфейса. Чтобы создать сервисный объект, вы запрашиваете у него AbstractFactory, например:
AbstractFactory factory = new AbstractFactory();
...
ServiceXYZ s = factory.newServiceXYZ();
s.doThis();
s.doThat();
Внутри AbstractFactory вы создаете соответствующий объект ServiceXYZ, используя Java-метод отражения Class.classForName () и SomeClassObject.newInstance (). (Выполнение этого означает, что вам не нужно иметь класс ServiceXYZ в файлах jar, если это не имеет смысла. Вы также можете создавать объекты в обычном режиме.)
Фактические имена классов считываются из файла свойств, уникального для каждого сайта.
Вы можете достаточно легко развернуть собственное решение или использовать такие рамки, как Spring , Guice или Pico .