И тогда java-bean выглядит примерно так:
Налицо дублирование кода. Повторящийся шаблон ("XXX" - заменяет переменную часть):
Основная цель аспектов - убирать дублирующийся код, встречающийся во многих методах. Это как раз тот случай. Заодно можно будет убрать и надоедливый "extends PropertyChange".
Теперь надо подумать, как aspectJ будет отличать сеттеры, в которые надо добавить общий код от остальных. Проще всего проставить аннотацию над классом и отобрать все сеттеры с одним аргументом.
Аннотация выглядит так:
Тогда bean можно будет писать в более простом виде:
И сам аспект:
Или в annotation-style:
Теперь по шагам:
- Все классы, аннотированные @Bean будут наследовать PropertyChange (в случае с аннотациями они будут наследовать только интерфейс IPropertyChange, а реализация методов будет браться из PropertyChange).
Или в annotation-style:
- Все нужные нам сеттеры - это методы типа void, принимающие один параметр, находящиеся в классе, помеченные аннотацией @Bean.
Или в annotation-style:
- Перед вызовом сеттера запоминаем текущее значение свойства в переменную oldValue(//1). Выполняем сеттер (//2) и публикуем сообщение (//3).
Или в annotation-style:
Комментариев нет:
Отправить комментарий