Re: [aspectwerkz-user] Aspect.aspectOf() behaviour
Alexandre Vasseur <[email protected]> Mon, 17 Oct 2005 15:42:11 +0200
| Newsgroups | gmane.comp.java.aspectwerkz.user |
|---|---|
| Message-ID | <[email protected]> |
The perclause precisely controls this behavior For more lazy behavior you can use a singleton aspect and a object keyed map that delegates to another aspect. That said you can also try the "perInstance" type - I can't remember if we have deprecated it or not in AW 2.0. It basically does this plumbing for you. Alex On 10/17/05, AVERY, Neil, FM <[email protected]> wrote: > > All, > If I apply a 'perTarget' Aspect to a object and call > Aspects.aspectOf(SimpleAroundAspect.class, testClass) then I get an > exception, NoAspectBound...(see below) > > However, if a prior invocation has occured then Aspects.aspectOf(..) will > return the Aspect that was bound.... > > Ideally I would like to get access to an aspect bound to the object instance > regardless of whether or not it has been invoked. Is it possible to > determine/control the behaviour as its the kind of thing that will affect > component lifecycle when interacting with aspects...? > > Cheers Neil. > > TEST: > public void testDifferendAspectInstanceGetsApplied() > throws Exception { > > TestClass testClass = new TestClass(); > >>>// testClass.doStuff(); > > Object aspect1 = Aspects.aspectOf(SimpleAroundAspect.class, testClass); > } > } > THROWS: > org.aspectj.lang.NoAspectBoundException: Exception while > initializing org.stuff.SimpleAroundAspect: > java.lang.reflect.InvocationTargetException > at org.aspectj.lang.Aspects.aspectOf(Aspects.java:66) > at > org.stuff.aspectof.SimpleAspectTest.testDifferendAspectInstanceGetsApplied(SimpleAspectTest.java:27) > at sun.reflect.NativeMethodAccessorImpl.invoke0(Native > Method) > at > sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) > at > sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) > at java.lang.reflect.Method.invoke(Method.java:585) > at junit.framework.TestCase.runTest(TestCase.java:154) > at junit.framework.TestCase.runBare(TestCase.java:127) > at > junit.framework.TestResult$1.protect(TestResult.java:106) > at > junit.framework.TestResult.runProtected(TestResult.java:124) > at junit.framework.TestResult.run(TestResult.java:109) > at junit.framework.TestCase.run(TestCase.java:118) > at > org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:478) > at > org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:344) > at > org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:196) > Caused by: java.lang.reflect.InvocationTargetException > at sun.reflect.NativeMethodAccessorImpl.invoke0(Native > Method) > at > sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) > at > sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) > at java.lang.reflect.Method.invoke(Method.java:585) > at org.aspectj.lang.Aspects.aspectOf(Aspects.java:63) > ... 14 more > Caused by: org.aspectj.lang.NoAspectBoundException > at > org.stuff.SimpleAroundAspect.aspectOf(SimpleAroundAspect.java:1) > ... 19 more > > ASPECT: > package org.stuff; > > import org.aspectj.lang.ProceedingJoinPoint; > import org.aspectj.lang.annotation.*; > > @Aspect("pertarget(call(* org.stuff.TestClass.*(..)))") > public class SimpleAroundAspect { > public static int callCount = 0; > > @Around("call(* org.stuff.TestClass.*(..))") > public Object invoke(ProceedingJoinPoint thisJoinPoint) throws Throwable { > > System.err.println("called onto SimpleAroundAspect count:" + > callCount++); > return thisJoinPoint.proceed(); > }; > } > > > > > > > *********************************************************************************** > The Royal Bank of Scotland plc. Registered in Scotland No 90312. Registered > Office: 36 St Andrew Square, Edinburgh EH2 2YB. > Authorised and regulated by the Financial Services Authority > > This e-mail message is confidential and for use by the > addressee only. If the message is received by anyone other > than the addressee, please return the message to the sender > by replying to it and then delete the message from your > computer. Internet e-mails are not necessarily secure. The > Royal Bank of Scotland plc does not accept responsibility for > changes made to this message after it was sent. > > Whilst all reasonable care has been taken to avoid the > transmission of viruses, it is the responsibility of the recipient to > ensure that the onward transmission, opening or use of this > message and any attachments will not adversely affect its > systems or data. No responsibility is accepted by The Royal > Bank of Scotland plc in this regard and the recipient should carry > out such virus and other checks as it considers appropriate. > Visit our websites at: > http://www.rbs.co.uk/CBFM > http://www.rbsmarkets.com > ******************************************************************************** > >