The Spring framework is growing. While Java EE has largely been a
prescription of architecture (the Java Pet Store and the Sun blueprints,
for example), the Spring framework has always been about choice. Java EE
focused on a best-practices-oriented solution, largely to the detriment
of alternative solutions. When the Spring framework debuted, few would
have agreed that Java EE represented the best-in-breed architectures of
the day. Each release sees the introduction of a myriad of new features
designed to both simplify and enable solutions. With Spring 2.0 and
later, the Spring platform started targeting multiple platforms. The
framework provided services on top of existing platforms, as always, but
was decoupled from the underlying platform wherever possible. Java EE is
still a major reference point, but not the only target. OSGi (a
promising technology for modular architectures) has been a big part of
the SpringSource strategy. Additionally, with the introduction of
annotation-centric frameworks and XML schemas, SpringSource could build
frameworks that effectively modeled the domain of the problem itself, in
effect creating DSLs. In short order, frameworks built on top of the
Spring framework emerged supporting application integration, batch
processing, Flex integration, OSGi, and much more.