Spring Framework, meestal afgekort tot Spring, is een vrij framework gericht op ontwikkeling van software in de programmeertaal Java. Het framework combineert API’s en ideeën waardoor het een alternatief biedt voor de standaard manier van ontwikkelen. Dankzij diverse uitbreidingen wordt het vooral gebruikt als alternatief voor of uitbreiding op technologieën uit J2EE-platform. Versie 3.1, die uitgegeven werd op 13 december 2011, bracht ondersteuning voor Java 7. Spring Framework versie 4 ondersteunt Java 6, 7 en 8.
J2EE
De normale manier van werken
Het J2EE-platform is gericht op het ontwikkelen van complexe applicaties, voornamelijk voor de zakelijke markt. Het architecturale idee achter dit platform is dat applicaties ontwikkeld worden volgens een functionele opdeling in een aantal lagen (tiers genaamd) en dat iedere laag geïmplementeerd wordt door een aantal componenten. Elke laag heeft een eigen soort component: een servlet of EJB. Deze dienen om zakelijke functionaliteit aan te bieden omkleed met een technische infrastructuur die ervoor zorgt dat andere applicaties en gebruikers de functionaliteit van iedere component kunnen aanspreken.
De technische architectuur bestaat uit een verzameling van technische “dienstverlening”: toegang tot databases, communicatiemechanismen en transactiemechanismen. De dienstverlening wordt aangeboden aan het zakelijke gedeelte van een component via een standaard faciliteit, een “container” geheten. Deze container accepteert als invoer een stukje software van een programmeur met daarin de implementatie van de zakelijke functionaliteit en omkleedt deze dan met toegang tot de technische infrastructuur.
Bij het J2EE-platform hoort, naast de API’s en andere faciliteiten, een verzameling afspraken over hoe de technische infrastructuur aangesproken en bediend hoort te worden vanuit de zakelijke functionaliteit. Daarnaast zijn er afspraken over hoe de zakelijke functionaliteit aangesloten hoort te worden op de container.
Met deze afspraken in de hand is het in principe mogelijk om de zakelijke functionaliteit zo te schrijven dat deze zonder verandering ingevoerd kan worden in iedere containerimplementatie en transparant toegang kan krijgen tot de specifieke faciliteiten van die container (de zakelijke functionaliteit weet dat er een database is met een bepaalde verzameling tabellen, maar de details (zoals het type database) zijn onbekend – die regelt de container). Daarnaast kan andere software transparant gebruikmaken van de zakelijke functionaliteit — deze wordt op een standaard manier aangeboden (“gepubliceerd”) binnen het systeem en kan dus op een standaard manier benaderd worden.
Model-View-Controller
Een andere functionaliteit die Spring biedt, speciaal aan de web kant van webapplicaties, is een model-view-controller-structuur. Deze faciliteit (een alternatief voor zaken als Apache Struts) maakt het mogelijk een nette scheiding aan te brengen in de presentatie van informatie via een webpagina en het gebruik van zakelijke functionaliteit achter die webpagina.