The framework has become popular in the Java community as an addition to the Enterprise JavaBeans (EJB) model.
[4]: 121–122 [5] The first version was written by Rod Johnson, who released the framework with the publication of his book Expert One-on-One J2EE Design and Development in October 2002.
[16] It was announced to "be the final generation within the general Spring 4 system requirements (Java 6+, Servlet 2.5+), [...]".
[51] In many cases, one need not use the container when using other parts of the Spring Framework, although using it will likely make an application easier to configure and customize.
[citation needed] On the other hand, interception only allows for public method-execution on existing objects at a join point.
[citation needed] Compared to the AspectJ framework, Spring AOP is less powerful, but also less complicated.
[citation needed] Spring 1.2 includes support to configure AspectJ aspects in the container.
Therefore, in the Spring reference documentation and API, terms such as aspect, join point, advice, pointcut, introduction, target object (advised object), AOP proxy, and weaving all have the same meanings[citation needed] as in most other AOP frameworks (particularly AspectJ).
Spring's data access framework addresses common difficulties developers face when working with databases in applications.
Support is provided for all popular data access frameworks in Java: JDBC, iBatis/MyBatis,[32] Hibernate,[32] Java Data Objects (JDO, discontinued since 5.x),[32] Jakarta Persistence API (JPA),[32] Oracle TopLink, Apache OJB, and Apache Cayenne, among others.
[68] Critics have said these template classes are intrusive and offer no advantage over using (for example) the Hibernate API directly.
[69][failed verification] In response, the Spring developers have made it possible to use the Hibernate and JPA APIs directly.
This however requires transparent transaction management, as application code no longer assumes the responsibility to obtain and close database resources,[70] and does not support exception translation.
The goal of each interface is to be simple and clear so that it's easy for Spring MVC users to write their own implementations, if they so choose.
This tight coupling to the Servlet API is seen by some as a failure on the part of the Spring developers to offer a high level of abstraction for Web-based applications [citation needed].
However, this coupling ensures that the features of the Servlet API remain available to developers while offering a high abstraction framework to ease working with it.
[4]: 144 Spring MVC ships with implementations of all these interfaces and offers a feature set on top of the Servlet API.
Spring MVC uses the Java java.util.Map interface as a data-oriented abstraction for the Model where keys are expected to be String values.
[citation needed] The ease of testing the implementations of these interfaces is one important advantage of the high level of abstraction offered by Spring MVC.
[93][4]: 324 DispatcherServlet is tightly coupled to the Spring inversion of control container for configuring the web layers of applications.
This information needs to be formatted in html or any front-end technology like Jakarta Server Pages (also known as JSP)[84][95] or Thymeleaf.
[84][4]: 390–391 As of Servlet Specification version 3.0, there are a few ways of configuring the DispatcherServlet:[96] Spring's Remote Access framework is an abstraction for working with various RPC (remote procedure call)-based technologies available on the Java platform both for client connectivity and marshalling objects on servers.
[97] The most important feature offered by this framework is to ease configuration and usage of these technologies as much as possible by combining inversion of control and AOP.
The framework provides fault-recovery (automatic reconnection after connection failure) and some optimizations for client-side use of EJB remote stateless session beans.
[105] Key Features: Spring Roo is a community project which provides an alternative, code-generation based approach at using convention-over-configuration to rapidly build applications in Java.
The WebSocket is especially useful for applications that require frequent and fast exchanges of small data chunks, at a high speed and volume.
The @EnableWebSocket annotation gives Websocket request processing functionality when places in a Spring configuration class.
[126] Although applications using Spring WebFlux technology is usually less readable than their MVC counterparts, they are more resilient, and simpler to extend.
[128][failed verification] However, SpringSource doesn't see EJB 3 compliance as a major goal, and claims that the Spring Framework and the container allow for more powerful programming models.
[129][failed verification] A remote code execution vulnerability affecting certain versions of Spring Framework was published in April 2022 under CVE-2022-22965.