Я работаю с Spring Framework 3.0.5 и Spring Security 3.0.5, и у меня есть вопросы к аспектно-ориентированному программированию. Сейчас я пытаюсь выяснить недостатки и преимущества аспектно-ориентированного программирования. Конечно, я знаю их в теории: я могу избежать избыточного кода, мне нужно только вносить изменения в аспект, а не везде в коде и так далее. Но у меня все еще есть некоторые вопросы:
Недостаток, который я обнаружил:
Я написал пример приложения, используя аспекты Spring AOP. Я настроил аспект с аннотациями (@Pointcut, @Before, @Aspect и т. Д.). Методы, которые запускают аспект (которые, конечно, были частью Pointcut), были, конечно, частью другого класса и ничем не аннотированы.
=> Я действительно считаю, что одним большим недостатком является то, что при просмотре этих методов другого класса не было ясно, что они вызывают аспект. Им не нужно было никаких аннотаций или чего-то еще, они были только упомянуты в pointcut аспекта. (Я очень надеюсь, что вы понимаете, о чем я). Вот почему я думаю, что АОП делает код также менее понятным!
а) Есть ли решение этой проблемы? (Может ли это быть решено, когда я помещаю всю конфигурацию в файл XML? Я так не думаю.)
b) Будет ли эта проблема все еще существовать, когда я буду использовать AspectJ вместо Spring AOP?
Функции пружин с использованием Spring AOP: у них нет этого недостатка?
Поскольку Spring AOP является частью многих функций Spring (точно так же, как декларативное управление транзакциями или (может быть) Spring Security (?)), Я более внимательно посмотрел на эти функции. Я не смог найти никакого недостатка.
в) Давайте возьмем в качестве примера декларативное управление транзакциями: управлять транзакциями так просто с этими аннотациями (@transactional), и я действительно не нахожу недостаток, который я упомянул выше. Я вижу методы, которые запускают определенное поведение. (все методы @transactional вызывают поведение транзакций) Может быть, я что-то неправильно понял, и это не то, где используется АОП? Но если я не понял этого неправильно, почему здесь можно увидеть, какие методы вызывают аспекты, и почему невозможно увидеть в моем примере выше? Я бы очень хотел это знать!
Спасибо, что ответили! : -)
РЕДАКТИРОВАТЬ: а) и б) ответы (используйте IDE, которая помечает эти методы), в) по-прежнему отсутствует: -)