What do we think about the common FooService + FooServiceImpl pattern in Spring/Java?
I understand why interfaces are useful when they represent a real abstraction: multiple implementations, a plugin/strategy pattern, a public API contract, ports/adapters, or a genuine testing seam…
But when there is only one implementation with no realistic alternative, AND no backwards-compatibility requirement, creating an interface purely so the implementation can be called FooServiceImpl feels like cargo-cult abstraction.
In modern Spring projects, where we can inject, proxy, and test concrete classes, should we default to a concrete @Service class and only introduce an interface when there is a clear reason?
Just to be clear: Im not against interfaces, I’m against interfaces that do not represent a real abstraction