Могу ли я использовать AspectJ/AOP для установки правил доступа во время компиляции между классами Java помимо обычных правил видимости?

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

Теперь мы хотели бы реализовать правило, согласно которому менеджеры не должны обращаться к другим менеджерам, сервисы должны выполнять работу между менеджерами. Однако система типов Java с ее правилами видимости этого не предусматривает — private/protected действует глобально, а не только для других менеджеров, менеджеры должны быть видны другим сервисам.

Итак, мы думали об АОП, который, безусловно, включал бы ограничения доступа между классами, но мы хотели бы, чтобы правила учитывались во время компиляции, а не во время выполнения. Кажется - у меня не было возможности подробно изучить это - что AspectJ обеспечивает время компиляции AOP, но включает ли это ограничения доступа времени компиляции между классами, как описано выше?

Любой намек на это помог бы нам быстро решить, идти ли вообще по этому пути или нет.

Спасибо!


person Conny    schedule 06.02.2015    source источник


Ответы (1)


Вы действительно можете использовать плетение AspectJ во время компиляции. Взгляните на операторы declare warning и declare error, которые описаны здесь и здесь. Для более точного ответа, включая фактический код аспекта, мне нужно знать ваш пакет и, возможно, структуру именования классов.

person kriegaex    schedule 07.02.2015