I have a (newbie) question regarding Spring framework, Aspect Orientated Programming and AspectJ.
Is there a way to find out which method caused call to "beforeAdvice" and "afterAdvice" ?
For example , in the example below , can I find out if Dog.bark() or Dog.sleep() caused call to "beforeAdvice" and "afterAdvice" ?
I have attached the console output below the source code.
Thanks for your time and help,
James
Dog.java
package com.tutorialspoint;
public class Dog
{
public void bark()
{
System.out.println("Dog.bark()");
}
public void sleep()
{
System.out.println("Dog.sleep()");
}
}
DogMonitor.java
package com.tutorialspoint;
public class DogMonitor
{
public void beforeAdvice()
{
System.out.println("DogMonitor.beforeAdvice() -- but was it bark or sleep ?");
}
public void afterAdvice()
{
System.out.println("DogMonitor.afterAdvice() -- but was it bark or sleep ?");
}
public void afterReturningAdvice(Object retVal)
{
System.out.println("DogMonitor.afterReturningAdvice(): " + retVal.toString());
}
public void AfterThrowingAdvice(IllegalArgumentException ex)
{
System.out.println("DogMonitor.AfterThrowingAdvice(): " + ex.toString());
}
}
MainApp.java
package com.tutorialspoint;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class MainApp
{
public static void main(String[] args)
{
ApplicationContext context = new ClassPathXmlApplicationContext("Beans.xml");
Dog dog = (Dog) context.getBean("dog");
dog.bark();
dog.sleep();
}
}
Beans.xml
<?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"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-3.0.xsd ">
<aop:config>
<aop:aspect id="dogMonitorAspect" ref="dogMonitorBean">
<aop:pointcut id="selectAll" expression="execution(* com.tutorialspoint.Dog.*(..))"/>
<aop:before pointcut-ref="selectAll" method="beforeAdvice"/>
<aop:after pointcut-ref="selectAll" method="afterAdvice"/>
</aop:aspect>
</aop:config>
<!-- Definition for dog bean -->
<bean id="dog" class="com.tutorialspoint.Dog"/>
<!-- Definition for dogMonitor bean -->
<bean id="dogMonitorBean" class="com.tutorialspoint.DogMonitor"/>
</beans>
Console output
DogMonitor.beforeAdvice() -- but was it bark or sleep ?
Dog.bark()
DogMonitor.afterAdvice() -- but was it bark or sleep ?
DogMonitor.beforeAdvice() -- but was it bark or sleep ?
Dog.sleep()
DogMonitor.afterAdvice() -- but was it bark or sleep ?