In the previous chapter, we took a deep dive into one of Spring's key features: dependency injection (IoC container). DI is an enterprise design pattern, that makes an object loosely-coupled from its required dependencies. We learned about Spring's bean wiring configuration and best practices to follow to achieve optimal results.
Moving further in line with Spring's core features, in this chapter, we will discuss Aspect-Oriented Programming (AOP). We've already learned that DI promotes programming to the interface and the decoupling of the application's objects, whereas AOP helps to achieve the decoupling of business logic and crosscutting concerns. A crosscutting concern is a concern applicable to part of the application or the entire application, for example, security, logging, and caching, which are required in almost...