[
Date Prev][
Date Next][
Thread Prev][
Thread Next][
Date Index][
Thread Index]
[
List Home]
[aspectj-users] @DeclareParents problems
|
I am having a really difficult time with using the @AspectJ annotated style @DeclareParents. I must be missing something.
I am trying to add a Spring interface (ApplicationContextAware) to several beans so that they automatically have access Spring's ApplicationContext. I would like to do this through an aspect. I implemented the interface like this:
======================================================
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
public class ApplicationContextAwareImpl implements ApplicationContextAware {
// Add ApplicationContext variable
protected ApplicationContext context = null;
// setter method for ApplicationContext - required by interface
public void setApplicationContext( ApplicationContext context ) {
//this.context = context;
}
}
======================================================
Simple enough. Then I created the aspect like this:
======================================================
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
@Aspect
public class Auditor {
@DeclareParents(value="com.company.*Logic", defaultImpl=ApplicationContextAwareImpl.class)
public ApplicationContextAware implementedApplicationContextAware;
@Pointcut("execution( * com.company.*Logic.*(..) )")
public void method(JoinPoint jp) {}
@Before("method(jp)")
public void beforeMethod(JoinPoint jp) {
System.out.println("target instanceof ApplicationContextAware: " + (jp.getTarget() instanceof ApplicationContextAware));
}
}
=======================================================
This too seemed simple enough. But I ended up with these problems using @DeclareParents:
1. If I implement any interface other than a marker interface, the application will not load in Tomcat...I get a 404...(this is a web service using Axis and Spring running on Tomcat)
2. If I implement more than one interface (of course markers only right now), I get the same 404.
3. If I declare more than one parent, I get the 404
4. If I use only a marker interface, it runs, but the jp.getTarget
() does not implement the interface (not instance of interface)
Now, here is where it gets really confusing. I decided to implement a similar structure with my own interfaces and all in a separate eclipse project. One interface implemented and declared as a parent. I compiled it and ran it using eclipse. It ran beautifully. I tried other implementations and scenatios. All scenarios above appear to work. WHAT??
So I think whichever aspectj version I am using to weave does not support @DeclareParents. The build must be using a different version from eclipse.
The difference is I use an Ant build to build the real project. So I checked that the Ant build was using the most recent AspectJ compiler. It is using
1.5.0. to be sure I downloaded the most recent. Still no go. What am I missing? It still seems like Eclipse and the Ant build are using different versions of the AspectJ compiler. One supports @DeclareParents and the other does not...
What do you think? I am open to any idea, but very lost at this point.
-Scott