I ams using Spring 2.5.6, asm 1.5.3, aspectjrt/aspectjweaver 1.6.1, cglib 2.1_3 In my Web based Spring application I have following class:
package uk.co.txttools.aspects;
@Aspect
public class LoggingAspect {
@Before("execution(* uk.co.txttools.web.controller.compose.PreviewMessageController.set*(..))")
public void setLoggingAdvice(){
System.out.println("********************************* Advice run..... set mothod called....");
}
@AfterThrowing("execution(* uk.co.txttools.web.controller.compose.PreviewMessageController.onSubmit(..) throws java.lang.Exception)")
public void hadleException(){
System.out.println("================= PreviewMessageController =========== ON SUBMIT Exception Throwen ==================");
}
@Before("execution(* uk.co.txttools.web.controller.compose.PreviewMessageController.onSubmit(..) throws java.lang.Exception)")
public void OnSubmitAspect(){
System.out.println("================= PreviewMessageController =========== ON SUBMIT CALLED ==================");
}
}
I have one Controller:uk.co.txttools.web.controller.compose.PreviewMessageController
which has
onSubmit()method, which get called from web page.
I have separate
applicationContext.xml` file.
My springapp-servlet.xml
(which is used in web.xml file with org.springframework.web.servlet.DispatcherServlet) file looks like this:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:util="http://www.springframework.org/schema/util"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd
http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-2.5.xsd">
<aop:aspectj-autoproxy proxy-target-class="true" />
<bean id="loggingAspect" class="uk.co.txttools.aspects.LoggingAspect" />
.
.
Below in same xml file PreviewMessageController
get initialize which means my Controller and Aspect live is same container.
I don't get any exception while running application but my aspect class LoggingAspect
never get called.
I'm not sure what is that missing or I'm doing wrong.
Please help me..
Thanks
I'm not sure if I did it properly but for me what solved it was adding @Component
to the "Aspect'ed" class -
@Aspect
@Component
public class PerformanceLogger {
private Logger logger = LoggerFactory.getLogger(this.getClass());
@Around("within(com.something.rest.service..*)")
public Object doBasicProfiling(ProceedingJoinPoint pjp) throws Throwable {
long start = System.currentTimeMillis();
Object retVal = pjp.proceed();
long end = System.currentTimeMillis();
logger.debug(pjp.getSignature().toShortString() + " Finish: " + (end - start) + "ms");
return retVal;
}
}
(And just to close the loop - if you are using annotation based, don't forget adding @EnableAspectJAutoProxy
to your Config class.
@EnableAspectJAutoProxy