<dependency>
<groupId>org.beaninject</groupId>
<artifactId>beaninject-core</artifactId>
<version>1.0.0</version>
</dependency>
public class Logger {
public void log(String methodName) {
System.out.println("Executing method: " + methodName);
}
}
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface Log {
}
public class LoggingAspect {
@Before("@annotation(com.example.Log)")
public void beforeMethod(JoinPoint joinPoint) {
String methodName = joinPoint.getSignature().getName();
Logger logger = new Logger();
logger.log(methodName);
}
}
public class App {
public static void main(String[] args) {
AspectContext aspectContext = new AnnotationAspectContext();
aspectContext.registerAspect(LoggingAspect.class);
TargetObject targetObject = new TargetObject();
aspectContext.inject(targetObject);
targetObject.method1();
targetObject.method2();
}
}
public class TargetObject {
@Log
public void method1() {
System.out.println("Executing method1...");
}
public void method2() {
System.out.println("Executing method2...");
}
}
Executing method: method1
Executing method1...
Executing method: method2
Executing method2...