You will learn aspect programming by implementing a Spring AOP custom annotation to log the execution time of a method without modify its code. AOP stands for Aspect-Oriented Programming
Add Spring AOP into your project
Add spring-boot-starter-aop into your project as a dependency on pom.xml or build.gradle file. The library versions can be omitted as it is resolved by the parent pom provided by Spring Boot
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-aop</artifactId>
</dependency>
</dependencies>
You can find the full pom.xml file as below
Create a custom annotation
In Java, you can use @interface to define an annotation type as the following
Target indicates the contexts in which an annotation type is applicable. The contexts can be ElementType.METHOD and ElementType.TYPE
Retention indicates how long annotations with the annotated type are to be retained. The default value is RetentionPolicy.CLASS which is only retained by the compiler. RetentionPolicy.RUNTIME is retained by both the compiler at compile-time and VM at run-time
Create an aspect
Use AspectJ annotations such as @Aspect and @Around to declare aspect and advice
The logExecutionTime is only applied to method annotated with @LogExecutionTime thanks to this advice @Around("@annotation(LogExecutionTime)")
Apply to a method
Add @LogExecutionTime to a method
Run and test
You can run the application by typing the following command on the terminal console at the project root directory
$ mvn clean spring-boot:run
You would see something like this text in the console
CommandLineRunner com.hellokoding.spring.Application.commandLineRunner(ApplicationContext)
executed in 11ms
Conclusion
In this tutorial, we learned to create a custom annotation and apply it to a method by using Spring AOP and AspectJ annotations. You can find the full source code at GitHub https://github.com/hellokoding/hellokoding-courses/tree/master/spring-examples/spring-aop-example