Formally, it's not "Spring", it's The Spring Framework. Just "Spring" for short.
Spring has at its core a Bean Factory - a service class that servers as a general-purpose creator and dispenser of JavaBean objects. Given the name of a bean in its inventory - which is often defined by an XML file and/or annotations on included bean classes - the factory can then create and initialize an instance of that bean. Or, if the bean is defined as a singleton object, create the first instance and pass references to it to subsequent requesters.
Along with basic construction, the factory may also inject references to other Spring-managed beans into a bean being initialized before it's returned to the requester. That implements the Inversion of Control (IoC) or "wiring"
pattern where you don't make beans connect themselves to each other, but instead have the framework do it automatically. Which makes it easier to build a project out of pre-defined parts as well as swapping plug-compatible parts for things like
testing. I like to consider it the software equivalent of a TinkerToyâ„¢ set.
Over the years, a number of functional support subsystems ("Projects") have been built as optional add-ons to the core Spring. For example, Spring Data deals with persistent data storage and provides an abstract mechanism for database CRUD functions and finders. Under it are different flavors such as raw
JDBC, JPA, graph databases (Neo4J) and NoSQL databases. Spring Data takes care of a lot of the repetitive coding automatically, including error recovery and it normalizes error exceptions to make it easier for an application to tell why a request failed.
Spring Data is popular, but there's a lot more, including Spring Scheduling, Spring Batch, Spring Web, Spring Security, and on and on.
Spring Boot is a relatively new and very popular Spring Project. Instead of developing individual webapps that must be configured and deployed into webapp servers, Spring Boot builds a stand-alone application that contains a webapp server and a user application all rolled into one and ready to launch with a single command. This is certainly useful for making desktop-based web apps (At one time, VMWare had a console app like that, but alas, before Spring Boot), but in today's container-based paradigm it's a natural fit for a container. A relatively simple Dockerfile, a Spring Boot executable and you can be deploying a whole farm of elastic hosts in less than an hour!