Professional Documents
Culture Documents
AOP
AOP
AOP
ПОДРЖАНА АСПЕКТНО-
ОРИЈЕНТИСАНИМ
ПРОГРАМИРАЊЕМ
Ментор: Драган Бојић
Аутор: Саша Мисаиловић
Пролеће 2008
Садржај
• Мотивација
• Раздвајање одлика
• Принципи АОП
• АОП Алати - AspectJ
• Аспектуална рефакторисања
• Коментари
Пример
class Student {
Map<Subject, Grade> grades;
…
• Сваки модул
представља
независну
одлику
aspect Logging {
pointcut c_m() : execution(void C.m1(int)) || execution(int C.m2());
// modifier_pattern ret_type_pattern type_pattern.id_pattern(..))
pointcut c_mx() : execution (* C+.m*(..));
*C.class,
C.java, Logger.java C.class, Logger.class, Logger.class,
@AspectLogging.class AspectLogging.class
Logging.aj
AspectJ - имплементација
• Елементи АОП се преводе у елементе ООП,
који се могу покренути у извршном окружењу:
– Аспект се преводи у класу
– Pointcut се представља анотацијом која садржи
правило за упаривање са Join Point-има; анотација
припада аспекту.
– Advice се представља као метод класе која настаје
од аспекта; место примене advice-а се обележава
посебном анотацијом
• Статичка инструментација на нивоу класе
– Инструментизује се byte code - BCEL библиотека
– Може се извршавати на било којој Јава VM
AspectJ - пример
class C {
void m1(int i) { /* execute operation body m1… */ }
int m2() {/* execute operation body m2… */; return … }
}
aspect Logging {
pointcut c_m() : execution( void C.m1(int)) || execution(int C.m2());
pointcut c_mx() : execution (* C+.m*(..));
• Пример:
aspect DetectConsoleUsage {
declare warning : get ( * System.out)
|| get ( * System.err)
: “Consider using Logging.log() instead