Services
The concept of services is not new in Java. It is a fundamental concept that has been around since JDK 1.3, which is known as the Java extension mechanism. The idea is to make your application more modular, extensible, and pluggable, where you, as the developer, may provide the default behavior and also implement the capability to extend your application beyond the defaults and let the behavior change at deploy time or, perhaps, even at runtime. If you are familiar with the Spring framework, the concept of services is very much like dependency injection and inversion of control.
As you may already know, a Service is a published contract, a set of operations with a well-defined interface. In Java, a service can be implemented using an interface or an abstract class. A service provider offers the concrete implementation of the service. As a Java developer, you use or implement services and providers every day, and you may not actively think about it. JDBC is a good example. The API...