package com.aspectprogramming.aspects.experiments; public aspect CloneAdvisedClass { pointcut test(CloneTestClass tc): execution (* CloneTestClass.change*(..)) && this (tc); Object around (CloneTestClass tc): test (tc) { Object save = tc; try { save = tc.clone(); } catch (Exception e) { System.out.println ("Failed to clone \""+tc+"\": "+e); e.printStackTrace(System.out); } Object result = proceed(tc); System.out.println ("old: "+save.toString()); System.out.println ("new: "+tc.toString()); return result; } }