Как обеспечить рекомендации по порядку для двух точечных резов, соответствующих одной и той же точке соединения в Aspectj и AOP

Я планирую использовать Spring Security с помощью Spring AOP. У него будут собственные точки для всех общедоступных методов в классах контроллеров. Методы будут выбираться по имени класса и общедоступному методу, возможно, по частичным сигнатурам аргументов.

Я также хочу инкапсулировать код, который проверяет заголовки, хороший json, хороший объект запроса json и аутентификацию, и вставить его в общедоступные методы классов контроллеров. Поскольку у меня будут и JSON-RPC, и JSON-REST, всего будет ТРИ Point Cuts для доступа к общедоступным методам, описанным выше.

Spring Security вставит рекомендации по всем методам, вырезание точек JSON-RPC позаботится об этом классе контроллера, а вырезание точек JSON-REST позаботится о его классе контроллера.

Как я могу обеспечить порядок работы двух советов? Я хочу, чтобы в первую очередь работала система безопасности.


person Dennis    schedule 15.04.2013    source источник


Ответы (2)


Вы можете использовать аннотацию @Order

http://static.springsource.org/spring/docs/3.0.x/javadoc-api/org/springframework/core/annotation/Order.html.

Вы не предоставили дополнительной информации о том, как вы настроили свой ап, чтобы точно указать, как это можно использовать в вашей структуре.

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

<bean id="xyz" class="com.abc.XYZ">
     <property name="order" value="34"/>  
</bean>
person Bhushan Bhangale    schedule 15.04.2013
comment
Из того, что я прочитал по вашей ссылке, это для точечных сокращений на основе аннотаций. Я надеюсь избежать этого, чтобы совет был автоматическим, и программисту не приходилось об этом беспокоиться. Вы знаете, есть ли способ сделать заказ без аннотации? - person Dennis; 16.04.2013

Хорошая ссылка с ответом: аспект ADK 1.5 Notebook

Еще одна ссылка, которую я хочу процитировать: ответ

Чтобы объявить приоритет аспектов, вы можете использовать специальное ключевое слово

declare precedence : <Type1Pattern>,<Type2Pattern>…<TypeNPattern>;

В приведенном выше примере аспект1 имеет приоритет над аспектом2, который, в свою очередь, имеет приоритет перед аспектом3 и т. Д. До аспектаN.

Под «имеет приоритет над» мы подразумеваем «выполняется раньше». Обычно первым выполняется аспект с наивысшим значением. Порядок исполнения также зависит от типа консультации.

the aspect with highest precedence kicks in before the lowest precedence aspect for before() advice
the aspect with highest precedence kicks in after the lowest precedence aspect for after() advice
the aspect with highest precedence wraps around the lowest precedence aspect for around() advice

Лучшая практика в AspectJ - объявить специальный аспект, задача которого состоит просто в объявлении приоритета для других аспектов.

Пример: публичный аспект MyAspectOrdering {объявить приоритет: около1, около2, до3, до4, после5; объявить приоритет: транзакционный *, около 4; объявить приоритет: *, before2; }

person Dennis    schedule 16.04.2013