public class AfterReturningResult { public static void main (String[] args) { new CFCommandProcessor().run(); } } class CFCommand { void handleResponse() {} void updateCache() { System.err.println("updating cache");} } class CFCommandProcessor { public void run() { new CFCommand().handleResponse(); } } aspect A { pointcut response(CFCommand cmd) : within(CFCommandProcessor) && target(cmd) && call(void CFCommand.handleResponse (..)); after(CFCommand cmd) returning: response(cmd) { cmd.updateCache(); } } aspect B { Object around(): execution(void run()) { return proceed(); } }