I wouldn't try to do something like this
with a constructor -- that would severely change the semantics of
"new", which the caller expects to always return a new instance of
something.
JB> That is what the tag interface is
for (ITransparentSessionCache) – the developer MUST subscribe explicitly
to this caching functionality.
if we force the use of factories –
we would have to develop a significant amount of code just to use aspectj.
I seen the factory example in the aspectj in action (excellent book BTW!!!!)...
I am trying to avoid that if I can – I need something a little more
seamless... at least until we are through
the prototyping/POC stages. Caching on construction would be a HUGE bonus for
us.
I do agree with you though it could be
quite dangerous.... but extremely elegant at the same time... IMO.
-----Original Message-----
From:
aspectj-users-admin@xxxxxxxxxxx [mailto:aspectj-users-admin@xxxxxxxxxxx] On Behalf Of Scott Stanchfield
Sent: Thursday, October 21, 2004
12:29 PM
To: aspectj-users@xxxxxxxxxxx
Subject: RE: [aspectj-users]
trying to write a simple caching aspect
Not sure how to do
something like this with AspectJ, but it raised a red flag for me:
I wouldn't try to do
something like this with a constructor -- that would severely change the
semantics of "new", which the caller expects to always return a new
instance of something.
If you had some factory
methods that you added caching to, this would be fine (again, depending on the
semantics of the methods), but be careful how things are documented. If the
factory method guarantees a new object (which is what "new" does),
you shouldn't change the semantics like this, as the caller code may have been
written to rely on this behavior.
(This is one of the
things that scares me about AspectJ...)
-- Scott
From: aspectj-users-admin@xxxxxxxxxxx
[mailto:aspectj-users-admin@xxxxxxxxxxx] On
Behalf Of Jody Brownell
Sent: Thursday, October 21, 2004
11:18 AM
To: aspectj-users@xxxxxxxxxxx
Subject: [aspectj-users] trying to
write a simple caching aspect
Hi – I am
new to aspectj, I am working through some example and trying to develop a few
aspects as a proof of concept.
The first aspect I am trying to develop is a real
simple caching aspect which caches objects based on the implementation of a tag
interface.
What I would like to do is when a constructor is
called, check if the class implements an interface, if it does check the cache.
If there is
no reference in the cache, proceed, cache the object
and then return it. Otherwise return the cached instance.
What I need to be able to do is get the name of the
class the constructor is being called on. My pointcut should really select all
constructors in the system (maybe confined to a package)
with any number of arguments. Once I have the class object or the name,
I can determine if the cache should be consulted.
Is this possible? If so could someone provide me with
an example of the pointcut and advice. I would provide what I have already
but I
am stumped as to how I can capture class of the object
I am trying to instantiate. My problem is I would like to capture the class as
context in
an around advice using a target() like construct.
Thanks in advance.
Jody b.