SPRING-SOURCE.RU

Пример аспекта

Пример без аспектов

                        
public Bogatstvo goPohod() throws BadPohodException
{
logger.entry("goPohod(...)");

// действия

logger.exit("goPohod(…)");
}
		

Что можно изменить? Пример с аспектами

                        
public aspect AutoLog {

        pointcut publicMethods() :
                execution (public * *(..));

        pointcut logObjectCalls() : execution (* Logger.*(..));

        pointcut loggableCalls() :
                 publicMethods() && ! logObjectCalls();

         before() : loggableCalls() {
                 Logger.entry (thisJoinPoint.getSignature().toString());
        }

        after() : loggableCalls() {
                 Logger.exit (thisJoinPoint.getSignature().toString());
        }
}
		

Здесь первые три pointcut описывают, то, где будет применяться aspect.
pointcut publicMethods() : execution (public * *(..)) – на всех public методах
pointcut logObjectCalls() : execution (* Logger.*(..)) – на всех методах класса Logger
pointcut loggableCalls() : publicMethods() && ! logObjectCalls() – объединяет предыдущих два ( на всех public методах кроме методов класса Logger)

Before и after – это то, что будет выполняться до метода и после него. Функциональность Logger-а вынесена в отдельный класс. В итоге public метод о логировании знать ничего не будет. Он будет выполняться как и раньше.