[
Date Prev][
Date Next][
Thread Prev][
Thread Next][
Date Index][
Thread Index]
[
List Home]
Re: [aspectj-users] Newbie question on inter-type member declarations
|
hi wes,
can you explain why you dont like any of those solutions?
You might get as much convenience from a utility - variants:
String.valueOf(x)
Renderer.render(int x)
getRenderer(y).render(y.x, "fieldname")
AspectJ could parameterize around the field name for lazy initialization:
String around(Item item) : get(String *AsString) && target(Item) {
String result = proceed(item);
if (result == null) {
// reflectively set field, based on utility call, keyed off
field signature
}
return result;
}
Or perhaps for each domain element viewable on a web page:
interface IWeb { String fieldAsString(String fieldName); }
aspect ImplementingIWeb {
declare parents {domainClasses} implement IWeb;
public String IWeb.fieldAsString(String fieldName) {
// default, reflective implementation
}
}
/** override default implementation for Item */
aspect ImplementingIWebForItem {
declare precedence ImplementingIWebForItem, ImplementingIWeb;
public String Item.fieldAsString(String fieldName) {
// custom Item implementation
}
}
(I personally don't like any of these options, but they might be worth
considering.)
Hope this helps -
Wes
------------Original Message------------
From: "Are Meisfjord" <are@xxxxxxxxxxxxx>
To: aspectj-users@xxxxxxxxxxx
Date: Mon, Aug-9-2004 2:10 AM
Subject: [aspectj-users] Newbie question on inter-type member
declarations
Hello!
I'm wondering if it's possible in AspectJ to add inter-type member
declarations based on pointcuts? A little example to illustrate what
I mean:
We have a web application using Struts. For convenience we
have introduced a naming convention requiring certain properties in
our domain model classes to have extra ...AsString properties that
formats the properties correctly for presentation in web pages
(using Struts taglibs). So if we have a property 'salary' in the
Employee class we will also have a property 'salaryAsString' that
returns the salary (originally a double) as a string with thousand
separators and two decimal precision.
Is it possible to enforce this convention throughout the application
with an aspect? Of course, We could list each ...AsString method as
an inter-type member declaration in the aspect, but that won't be
much of an improvement wrt programming effort. It would be much
better if we could make a pointcut selecting all get and set methods
of interest and then apply an advice on them that added the extra
methods...
Regards,
Are Meisfjord