dependencies {
implementation 'com.github.iroh:iroh:1.2.0'
}
import io.github.biezhi.iroh.IrohAdvisor;
import io.github.biezhi.iroh.JoinPoint;
import io.github.biezhi.iroh.annotation.*;
import io.github.biezhi.iroh.asm.IrohClassVisitor;
@Aspect
public class MyAdvisor extends IrohAdvisor {
@Before(className = "com.example.MyClass", methodName = "myMethod")
public void before(JoinPoint joinPoint) {
System.out.println("Before advice");
}
@Around(className = "com.example.MyClass", methodName = "anotherMethod")
public Object around(ProceedingJoinPoint proceedingJoinPoint) {
System.out.println("Before around");
Object result = proceedingJoinPoint.proceed();
System.out.println("After around");
return result;
}
@AfterThrowing(className = "com.example.MyClass", methodName = "someMethod")
public void afterThrowing(JoinPoint joinPoint, Throwable throwable) {
System.out.println("Exception thrown: " + throwable.getMessage());
}
@After(className = "com.example.MyClass", methodName = "anyMethod")
public void after(JoinPoint joinPoint) {
System.out.println("After advice");
}
@Override
public void setupClassVisitor(IrohClassVisitor irohClassVisitor) {
}
}
@Override
public void setupClassVisitor(IrohClassVisitor irohClassVisitor) {
irohClassVisitor.visitMethodInsn(INVOKESTATIC, "com.example.MyLogger", "log", "()V", false);
}
public class MyApp {
public static void main(String[] args) {
MyAdvisor advisor = new MyAdvisor();
advisor.run();
// ...
}
}