I am guessing that you are using the AspectJ's byte code weaving (and not Spring's proxy-based). Right?
If so, I just tried your example and it works fine for me (I removed Spring related code as that is not significant here). -Ramnivas On Wed, Jan 6, 2010 at 12:40 AM, <adrian.p.sm...@bt.com> wrote: > I am experimenting with the Spring integration for Aspectj as documented > at > http://static.springsource.org/spring/docs/2.5.x/reference/aop.html#aop- > using-aspectj and have come across a problem. > > If I alter the class invocation to override the method that I want to > instrument, the method is no longer detected. > > So, my class is: > > package foo; > > public class EntitlementCalculationService { > public void calculateEntitlement() { > System.out.println("executing"); > try { > Thread.sleep(200); > } catch (InterruptedException e) { > e.printStackTrace(); > } > } > } > > My aspect is: > > package foo; > > import org.aspectj.lang.ProceedingJoinPoint; > import org.aspectj.lang.annotation.Aspect; > import org.aspectj.lang.annotation.Around; > import org.aspectj.lang.annotation.Pointcut; > import org.springframework.util.StopWatch; > > @Aspect > public class ProfilingAspect { > @Around("methodsToBeProfiled()") > public void profile(ProceedingJoinPoint pjp) throws Throwable { > StopWatch sw = new StopWatch(getClass().getSimpleName()); > try { > sw.start(pjp.getSignature().getName()); > pjp.proceed(); > } finally { > sw.stop(); > System.out.println(sw.prettyPrint()); > } > } > > @Pointcut("execution(public * foo..*.*(..))") > public void methodsToBeProfiled(){} > } > > And my code to test is: > > package foo; > > import org.springframework.context.ApplicationContext; > import > org.springframework.context.support.ClassPathXmlApplicationContext; > > public final class Main { > public Main() { > ApplicationContext ctx = new > ClassPathXmlApplicationContext("/beans.xml", Main.class); > > EntitlementCalculationService > entitlementCalculationService = new EntitlementCalculationService();{ > > entitlementCalculationService.calculateEntitlement(); > } > > public static void main(String[] args) { > new Main(); > } > } > > This gives the correct output: > > [java] StopWatch 'ProfilingAspect': running time (millis) = 201 > [java] ----------------------------------------- > [java] ms % Task name > [java] ----------------------------------------- > [java] 00201 100% calculateEntitlement > > However, if I change the test code to override the calculateEntitlement > method like this: > > package foo; > > import org.springframework.context.ApplicationContext; > import > org.springframework.context.support.ClassPathXmlApplicationContext; > > > public final class Main { > public Main() { > ApplicationContext ctx = new > ClassPathXmlApplicationContext("/beans.xml", Main.class); > > EntitlementCalculationService > entitlementCalculationService = new EntitlementCalculationService(){ > @Override > public void calculateEntitlement() { > System.out.println("test1"); > } > }; > > entitlementCalculationService.calculateEntitlement(); > } > > public static void main(String[] args) { > new Main(); > } > } > > The aspect fails to trigger. > > Any ideas please? > > TIA, > > Adrian Smith > BT Group > _______________________________________________ > aspectj-users mailing list > aspectj-users@eclipse.org > https://dev.eclipse.org/mailman/listinfo/aspectj-users >
_______________________________________________ aspectj-users mailing list aspectj-users@eclipse.org https://dev.eclipse.org/mailman/listinfo/aspectj-users