Yep Spring creates DynamicProxy objects when it needs to add functionality to your code, and to create a DynamicProxy, you class has to implement an interface because you pass the interface class to the constructor of a DynamicProxy. This way from the client calling code perspective, it has a class that implements your interface.
There is another work around, but always create interfaces anyway, it is great
Java coding best practice.
But if you include CGLib's jar file in your class path then Spring will be able to create Proxy objects in which the Proxy extends your class.
Mark