public class Calculator {
public int add(int a, int b) {
System.out.println("Adding " + a + " and " + b);
int sum = a + b;
System.out.println("Result: " + sum);
return sum;
}
}
public class LoggingAspect implements MethodInterceptor {
public Object invoke(MethodInvocation methodInvocation) throws Throwable {
System.out.println("Before: " + methodInvocation.getMethod().getName());
Object result = methodInvocation.proceed();
System.out.println("After: " + methodInvocation.getMethod().getName());
return result;
}
}
public class Main {
public static void main(String[] args) {
Calculator calculator = new Calculator();
Enhancer enhancer = new Enhancer();
enhancer.setSuperclass(Calculator.class);
enhancer.setCallback(new LoggingAspect());
Calculator proxy = (Calculator) enhancer.create();
proxy.add(5, 10);
}
}
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjrt</artifactId>
<version>1.9.6</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>aopalliance</artifactId>
<version>1.0</version>
</dependency>