Content deleted Content added
Wikiuserwk (talk | contribs) linking similar page spring boot |
m Spacing wrt refs |
||
Line 47:
|}
The first version was written by [[Rod Johnson (programmer)|Rod Johnson]], who released the framework with the publication of his book ''Expert One-on-One J2EE Design and Development'' in October 2002. The framework was first released under the [[Apache License|Apache 2.0 license]] in June 2003. The first production release, 1.0, was released in March 2004.<ref>{{cite web |url=https://spring.io/blog/2004/03/24/spring-framework-1-0-final-released | date=24 March 2014 | title=Spring Framework 1.0 Final Released | website=Official Spring Framework blog |access-date=1 March 2021}}</ref> The Spring 1.2.6 framework won a [[Jolt Awards|Jolt productivity award]] and a [[JAX Innovation Award]] in 2006.<ref>[http://www.ddj.com/architect/187900423?pgno=10 Jolt winners 2006]</ref><ref>{{Cite web |url=http://jax-award.de/jax_award06/gewinner_de.php |title=JAX Innovation Award Gewinner 2006 |access-date=2009-08-12 |archive-url=https://web.archive.org/web/20090817202514/http://jax-award.de/jax_award06/gewinner_de.php |archive-date=2009-08-17 |url-status=dead }}</ref> Spring 2.0 was released in October 2006, Spring 2.5 in November 2007, Spring 3.0 in December 2009, Spring 3.1 in December 2011, and Spring 3.2.5 in November 2013.<ref>{{cite web |url=https://spring.io/blog/2013/11/07/spring-framework-3-2-5-released |date=7 Nov 2013 | title=Spring Framework 3.2.5 Released | website=Official Spring website | access-date=16 October 2016}}</ref> Spring Framework 4.0 was released in December 2013.<ref>{{cite web|url=https://spring.io/blog/2013/12/12/announcing-spring-framework-4-0-ga-release/|title=Announcing Spring Framework 4.0 GA Release|publisher=Spring blog|date=12 December 2013}}</ref> Notable improvements in Spring 4.0 included support for Java SE (Standard Edition) 8, [[Groovy (programming language)|Groovy]] 2,{{sfn | Walls | 2016 | loc=§5 | pp=92-106}}{{sfn | Cosmina | Harrop | Schaefer | Ho | 2017 | loc=§4 Spring Configuration in Detail and Spring Boot | pp=125-126 }} some aspects of Java EE 7, and [[WebSocket]].{{sfn | Cosmina | Harrop | Schaefer | Ho | 2017 | loc = §1 Introducing Spring | pp=1-18}}
Spring Framework 4.2.0 was released on 31 July 2015 and was immediately upgraded to version 4.2.1, which was released on 01 Sept 2015.<ref>{{cite web|url=http://spring.io/blog/2015/07/31/spring-framework-4-2-goes-ga|title=Spring Framework 4.2 goes GA|publisher=Spring Blog|date=31 July 2015}}</ref> It is ''"compatible with Java 6, 7 and 8, with a focus on core refinements and modern web capabilities"''.<ref name="spring-4.2">{{cite web|url=http://spring.io/blog/2015/07/31/spring-framework-4-2-goes-ga|title=Spring Framework 4.2 goes GA|publisher=Spring Blog}}</ref>
Line 103 ⟶ 101:
====Autowiring====
The Spring framework has a feature known as autowiring, which uses the spring container to automatically satisfy the dependencies specified in the JavaBean properties to objects of the appropriate type in the current factory.
There are several annotations that can be used for autowiring POJOs, including the Spring-specific annotation {{code|@Autowire}} (as well as several other Spring-specific annotations that help resolve autowire ambiguity such as the {{code|@Qualifier}} or {{code|@Primary}} annotations),{{sfn | Deinum | Long | Mak | Rubio | 2014 | loc=§3-3 Use POJO References and Auto-Wiring to Interact with other POJOs |pp=145-151}}{{sfn | Cosmina | Harrop | Schaefer | Ho | 2017 | loc=§3 Introducing IoC and DI in Spring - Autowiring Your Beans | pp=112-120 }} and the standard Java annotations {{code|@Resource}} and {{code|@Inject}}.{{sfn | Deinum | Long | Mak | Rubio | 2014 | loc=§3-4 Auto-wire POJOs the @Resource and @Inject annotation | pp=151-154}}
Line 191 ⟶ 189:
* Transactions managed on a JDBC Connection{{sfn | Deinum | Long | Mak | Rubio | 2014 | loc=§11-2 Choosing a Transaction Manager Implementation|pp=464-468}}
* Transactions managed on Object-relational mapping Units of Work{{sfn | Deinum | Long | Mak | Rubio | 2014 | loc=§11-2 Choosing a Transaction Manager Implementation|pp=464-468}}
* Transactions managed via the JTA
* Transactions managed on other resources, like [[object database]]s
Line 247 ⟶ 245:
* By using <code>javax.servlet.ServletContainerInitializer</code>{{sfn|Deinum|Cosmina|2021|loc=§4 Spring MVC Architecture - Bootstrapping DispatcherServlet|pp=84-90}}
* By implementing the <code> org.springframework.web.WebApplicationInitializer</code> interface.{{sfn|Deinum|Cosmina|2021|loc=§4 Spring MVC Architecture - Bootstrapping DispatcherServlet|pp=84-90}}
* By using the built-in autoconfiguration for Spring Boot, which uses the <code>[[Spring Boot#Bootstrapping DispatcherServlet|SpringBootServletInitializer]]</code> class.lm{{sfn|Deinum|Cosmina|2021|loc=§4 Spring MVC Architecture - Bootstrapping DispatcherServlet|pp=84-90}}
===Remote access framework===
Line 287 ⟶ 285:
* Provide opinionated 'starter' [[Project Object Model]]s (POMs) to simplify your [[Maven (software)|Maven]]/[[Gradle]] configuration{{sfn|Walls|2016|loc=§Preface|p=x}}
* Automatically configure Spring whenever possible{{sfn|Walls|2016|loc=§1.1.2|pp=4-5}}
* Provide production-ready{{sfn|Walls|2016|loc=§foreword|p=vii}} features such as [[software metrics|metrics]],{{sfn|Walls|2016|loc=§7|pp=124-139}} health checks
* Absolutely no code generation{{sfn|Walls|2016|loc=§1.1.3|p=7}} and no requirement{{sfn|Walls|2016|loc=§Preface|p=x}} for XML configuration.<ref>{{cite web | url=https://aristeksystems.com/blog/what-you-need-know-about-spring-boot/| title=About Spring Boot | accessdate=2020-03-18}}</ref>
* Smooth Integration and supports all Enterprise Integration Patterns.
Line 328 ⟶ 326:
* gateways - exposes an interface to the client for the requested services. A messaging middleware is responsible for provisioning this interface. This interface decouples the messaging middleware from the client by hiding the underlying JMS or Spring Integration APIs. Gateways are related to the [[Facade pattern]]. Spring's Integration class, <code>SimpleMessagingGateway</code>, provides essential support for gateways. <code>SimpleMessagingGateway</code> enables the Spring application to specify the channel that sends requests, and the channel that expects to receive responses. The primary focus of <code>SimpleMessagingGateway</code> is to deal with payloads, which spares the client from the intricate details of the transmitted and received messages. <code>SimpleMessagingGateway</code> is used along with channels to enable integration with file systems, JMS, e-mail, or any other systems that require payloads and channels.{{sfn|Deinum|Long|Mak|Rubio|2014|loc=§16-10 Using Gateways|pp=717-722}}
* splitter - Separates a large payload into smaller payloads to support different processing flows. The splitter is achieved in Spring using the splitter component. The splitter component usually forwards the messages to classes with more specialized functionality. Spring supports the <code>@Splitter</code> annotation to declare the component that requires this functionality.{{sfn|Deinum|Long|Mak|Rubio|2014|loc=§16-7 Forking Integration Control: Splitters and Aggregators|pp=710-713}}
* aggregator - Used for combining many messages into a single result. Loosely speaking, the aggregator is the reverse of the splitter. The aggregator publishes a single message for all components downstream. Spring supports the <code>@Aggregator</code> annotation to declare the component that requires this functionality.
Spring Integration supports pipe-and-filter based architectures.
===Spring WebSocket===
An essential rule for dealing with data streams effectively is to never block.{{sfn|Deinum|Cosmina|2021|loc=§11 The WebSocket Protocol|pp=422-425}} The WebSocket is a viable solution to this problem.{{sfn|Deinum|Cosmina|2021|loc=§11 The WebSocket Protocol|pp=422-425}} The WebSocket Protocol is a low-level [[transport protocol]] that allows [[Full duplex|full-duplex]] communication channels over a [[TCP connection]]. The WebSocket acts as an alternative to HTTP to enable two-way communication between the client and the server. The WebSocket is especially useful for applications that require frequent and fast exchanges of small data chunks, at a high speed and volume.{{sfn|Deinum|Cosmina|2021|loc=§11 The WebSocket Protocol|pp=422-425}}
Spring supports the WebSocket protocol by providing the WebSocket API for the reactive application. The <code>@EnableWebSocket</code> annotation gives Websocket request processing functionality when places in a Spring configuration class. A mandatory interface is the <code>WebSocketConfigurer</code> which grants access to the <code>WebSocketConfigurer</code>. Then, the Websocket URL is mapped to the relevant handlers by implementing the registerWebSocketHandlers(WebSocketHandlerRegistry) method
===Spring WebFlux===
|