Мы использовали aspectJ в одном из моих больших проектов довольно долгое время. Проект состоял из нескольких веб-сервисов, каждый с несколькими функциями, которые были интерфейсом для сложной системы обработки документов / запросов. Где-то около 75 тысяч строк кода. Мы использовали аспекты для двух относительно небольших частей функциональности.
Сначала была трассировка потока приложения. Мы создали аспект, который выполнялся до и после каждого вызова функции, чтобы распечатать «введенную функцию» и «вышедшую функцию». С помощью функции выбора функции (возможно, pointcut? Я не помню правильное имя) мы смогли использовать это как инструмент отладки, выбирая только те функции, которые мы хотели отследить в данный момент времени. Это было действительно хорошее использование для аспектов в нашем проекте.
Второе, что мы сделали, - это показатели, специфичные для приложения. Мы помещаем аспекты в методы нашего веб-сервиса для сбора информации о времени, информации об объектах и т. Д. И сохраняем результаты в базе данных. Это было хорошо, потому что мы могли собирать эту информацию, но при этом держать весь этот код захвата отдельно от «реального» кода, который выполнил работу.
Я читал о некоторых хороших решениях, которые аспекты могут принести к столу, но я все еще не уверен, что они действительно могут сделать все, что вы не могли сделать (возможно, лучше) с "нормальной" технологией. Например, я не мог придумать ни одной важной функции или функциональности, в которой нуждался бы ни один из наших проектов, которые не могли бы быть выполнены так же легко без аспектов - там, где я нашел аспекты полезными, были некоторые мелочи, которые я упомянул .