[
Date Prev][
Date Next][
Thread Prev][
Thread Next][
Date Index][
Thread Index]
[
List Home]
Re: [aspectj-users] A question about advice
|
Thanks, Matthew. In the example I gave, it is true that I should
define a join point at add user method. I didn't because I think
there're some scenarios that you may want to use an object which is
not directly related to the join point.
Cong
On Tue, 15 Mar 2005 09:27:41 +0000, Matthew Webster
<matthew_webster@xxxxxxxxxx> wrote:
>
>
> A pointcut e.g. this/target/args can only be used to extract context that
> is a property of the join point. In your example "UserList" is not a
> property of the User constructor execution join point. A better aspect
> would be one that intercepted the addition of a User object to a list:
>
> public class UserRecord
> {
> public static void main(String args[])
> {
> UserList usrlist = new UserList();
>
> User u1 = new User("Alice");
> User u2 = new User("Bob");
>
> usrlist.add(u1);
> }
> }
>
> class User
> {
> public User (String s) {
>
> }
> }
>
> class UserList
> {
> public void add (User u) {
>
> }
>
> public boolean isMember (User u) {
> return true;
> }
> }
>
> aspect Aspect_one
> {
> pointcut test (UserList ul, User u) :
> call(void add(User)) && target(ul) && args(u);
>
> before(UserList usrlist, User usr) : test(usrlist,usr)
> {
> System.out.println("hello there");
> if (usrlist.isMember(usr))
> System.out.println("The user is already in the list!");
> }
>
> }
>
> If you want to prevent the addition of duplicates you will need to use
> around advice with conditional "proceed" or throw a RuntimeException.
>
> Matthew Webster
> AOSD Project
> Java Technology Centre, MP146
> IBM Hursley Park, Winchester, SO21 2JN, England
> Telephone: +44 196 2816139 (external) 246139 (internal)
> Email: Matthew Webster/UK/IBM @ IBMGB, matthew_webster@xxxxxxxxxx
> http://w3.hursley.ibm.com/~websterm/
>
> Cong <yuncong@xxxxxxxxx>@eclipse.org on 15/03/2005 04:25:25
>
> Please respond to aspectj-users@xxxxxxxxxxx
>
> Sent by: aspectj-users-admin@xxxxxxxxxxx
>
> To: aspectj-users@xxxxxxxxxxx
> cc:
> Subject: Re: [aspectj-users] A question about advice
>
>
> Thanks for your answer, Eric. For the first solution, if an updated
> usrlist is needed, then I have to define any method call that modifies
> the usrlist as join points. It seems not a good choice. For your
> second solution, I don't understand it quite well.
> "UserRecord.aspectOf().setUserList(usrlist)", to my understanding,
> aspectOf() is used with an aspect. But UserRecord is a class. ... a
> little bit confused *-)
>
> On Mon, 14 Mar 2005 20:53:25 -0600, Eric Bodden <eric@xxxxxxxxx> wrote:
> > > This aspect contains an error - usrlist is not defined. And my
> > > question is that is there anyway for the aspect code to get the
> > > reference of the usrlist object defined in the main()?
> > There are several ways to do so. You could intercept the creation of the
> > list and store a reference in the aspect. Also you could explicitly spass
> > the reference to the aspect using something like
> > "UserRecord.aspectOf().setUserList(usrlist)", which of course implies
> that
> > you have a matching method defined in the aspect.
> >
> > Eric
> >
> > _______________________________________________
> > aspectj-users mailing list
> > aspectj-users@xxxxxxxxxxx
> > http://dev.eclipse.org/mailman/listinfo/aspectj-users
> >
> _______________________________________________
> aspectj-users mailing list
> aspectj-users@xxxxxxxxxxx
> http://dev.eclipse.org/mailman/listinfo/aspectj-users
>
> _______________________________________________
> aspectj-users mailing list
> aspectj-users@xxxxxxxxxxx
> http://dev.eclipse.org/mailman/listinfo/aspectj-users
>