I can't do OSGI justice in an e-mail, you'll have to do your own research on that. But here's why I think it's pretty cool.
It introduces the concept of "services" at a java level. Instead of deploying one war with built-in services for talking to the database, you rely on a database OSGI "bundle" being available in your runtime environment. The bundle has an id, a version number, and a series of services it exposes to the collective runtime. It is also self-contained with it's own jars and classloader.This way, your UI doesn't package the service code and all of its dependencies, it just relies on it being there. Version 1.0 may retrieve the data from the database, version 2.0 may use a web-service. Both
can co-exist in the same runtime, but won't have classpath conflicts since they have their own classloaders.
What Spring did (from my understanding), is took an OSGI runtime and added a bunch of spring bundles. From an enterprise community, it's impressive to think about how this could be used. A whole runtime full of services just waiting to be consumed. No web-services, no RMI and no XML. Instead of creating a service that accesses some backend system and using a tool like Ivy to pull him and all his dependencies in. You could write that same system as an OSGI bundle, deploy it, and every application that needs it can reference it. If you're not ready to switch everyone over, keep the last 3 versions out there and let people upgrade as they want.