2013-06-14 3 views
0

Это больше вопрос дизайна. Структура моего проекта такова: у меня есть дюжина интерфейсных классов, некоторые классы уровня обслуживания и один базовый класс, который связывается с внешней системой. Я использую Spring для инициализации и вставки экземпляра класса backend в компоненты класса службы, а в свою очередь - компоненты класса службы в компоненты класса frontend (в зависимости от ситуации).Весна - изменение стоимости недвижимости на основе контейнера bean

Интерфейсные классы (логически) разделены на модули. Уровень обслуживания и бэкэнд являются общими.

Теперь мое требование состоит в том, что методы класса backend должны посылать другое значение для поля во внешнюю систему, основанное на модуле внешнего интерфейса, вызывающего вызов.

Чтобы сделать его более простым, рассмотрите (несколько грубую) usecase, где базовый класс соединяется с БД для каждого вызова метода. Вызовы БД, инициированные внешними классами модуля А, должны всегда соединяться с именем пользователя «moduleA». Аналогично, все вызовы из модуля B должны приводить к подключению с использованием имени пользователя «moduleB». Обратите внимание, что само поведение является обычным, независимо от вызывающего - просто имя пользователя должно быть другим.

Наиболее тривиальный способ состоит в том, чтобы каждый компонент класса frontend имел свою собственную копию класса класса служебного уровня, который, в свою очередь, имеет свою собственную копию бэкэндового класса. Например, фасонные компоненты модуля A будут ссылаться на сервисный компонент moduleA, который будет ссылаться на бэкэндонный модуль moduleA. В этом случае я могу ввести имя пользователя модуля A в бэкэнд-модуль модуля A. Аналогично, для модуля Б будет набор определений bean (frontend + service + backend).

Но я не хочу создавать так много определений бобов. Другим тривиальным способом является передача значения из интерфейса во всех методах. Но это широко распространенное изменение. Есть ли более простой способ использования Spring?

ответ

0

Вы должны попробовать передать значения, используя локальный поток (если ваши модули работают внутри одной JVM) Будьте осторожны, чтобы очистить поток в сервлет-фильтре с помощью метода finally.

Смежные вопросы