Using the articles about JavaConfig in Guice vs. Spring JavaConfig: A comparison of DI styles and Simplifying Enterprise Applications with Spring 2.0 and AspectJ I managed to use aspectj configured with spring in java code only, that is without using xml files.
Here is the annotated aspectj class:
import org.aspectj.lang.annotation.AfterReturning;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Pointcut;
@Aspect
public class HelloFromAspectJ {
@Pointcut("execution(* main(..))")
public void mainMethod() {}
@AfterReturning("mainMethod()")
public void sayHello() {
System.out.println("Hello from AspectJ!");
}
}
Here is the ordinary java class which is adviced by the above aspect:
public class HelloService {
public void main() {
System.out.println("Hello World!");
}
}
And here is the configuration class, which replaced the spring's configuration xml file:
import org.springframework.config.java.annotation.Configuration;
import org.springframework.config.java.annotation.Bean;
import org.springframework.config.java.context.AnnotationApplicationContext;
import org.springframework.aop.aspectj.annotation.AnnotationAwareAspectJAutoProxyCreator;
import org.springframework.context.ApplicationContext;
@Configuration
public class SpringConfig {
@Bean
public HelloService helloService() {
return new HelloService();
}
@Bean
public HelloFromAspectJ helloFromAspectJ() {
return new HelloFromAspectJ();
}
@Bean
public AnnotationAwareAspectJAutoProxyCreator annotationAwareAspectJAutoProxyCreator() {
return new AnnotationAwareAspectJAutoProxyCreator();
}
public static void main(String[] args) {
ApplicationContext ctx = new AnnotationApplicationContext(SpringConfig.class);
HelloService helloService = (HelloService) ctx.getBean("helloService");
helloService.main();
}
}
Note that the bean AnnotationAwareAspectJAutoProxyCreator is the
enabler of annotated aspects in spring. It has the same function as the
<aop:aspectj-autoproxy/>
element in the spring's xml configuration.
Read More...
Summary only...