Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Is it possible to inject lines of code at specific positions through annotations

I want to inject some code through annotations in java. The plan is I have two methods beginAction() and endAction(). I want to annotate a method such that before executing the statements in the method the beginAction() will be put and after finishing executing them the endAction() will be put automatically. Is it possible. If yes please suggest me how to do.

@MyAnnotation
public void myMethod(){
    // Statement 1;
    // Statement 2;
}

At runtime the beginAction() and endAction() should be injected in the method through the annotation. That is it should become like the following at runtime.

public void myMethod{
    beginAction();
    // Statement 1;
    // Statement 2;
    endAction();
}
like image 994
Debdipta Halder Avatar asked Jan 23 '26 19:01

Debdipta Halder


1 Answers

It looks like you need aspects. AspectJ is the most popular library in this case. You can read more about it here: https://eclipse.org/aspectj/docs.php

And here's the example of such aspect in use:

Class with intercepted method:

public class YourClass {
    public void yourMethod() {
        // Method's code
    }
}

Aspect itself:

@Aspect
public class LoggingAspect {

   @Around("execution(* your.package.YourClass.yourMethod(..))")
   public void logAround(ProceedingJoinPoint joinPoint) throws Throwable {
       System.out.println("Do something before YourClass.yourMethod");
       joinPoint.proceed(); //continue on the intercepted method
       System.out.println("Do something after YourClass.yourMethod");
   }

}
like image 93
Rozart Avatar answered Jan 26 '26 10:01

Rozart



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!