Quick Notes on Spring Boot
Recently I started reviewing Spring Boot. Even though I have been working on it for some time, my practical and theoretical knowledge were note aligned. And that was making me struggle during job interviews and exams. Hence I started typing some notes here and there.
This is just an edited version of my note. I want to use it as a quick reference and hope someone would use it too.
So, what is Spring Boot?
Spring Boot is the result of the spring framework adopting itself to quick bootstrapping techniques.
Spring Boot = Spring + Bootstrapping
Here is the official definition.
Spring Boot makes it easy to create stand-alone, production-grade Spring-based Applications that you can "just run".
But what is Spring
It is an enterprise Java-based application framework, with its core:-
- Dependency injection, events, resources, i18n, validation, data binding, type conversion, SpEL, AOP.
And support for:-
- Programming and configuration model,
- Testing: mocking, test
- Infrastructure support at application level,
- Data access: transactional data, DAO, ORM, etc
- Integration: JMS, JMS, Scheduling, etc
- Language: Kotlin, Groovy,
Spring Drawbacks
- It is a huge framework. Cost,
- Bloat,
- Lack of clear start point,
- Multiple build and deploy steps.
Spring Boot
Abstraction of Spring with a common approach. Hence it is:-
- Opinionated,
- Conventional,
- Stand alone (Doesn't need servlet container)
- Production-ready
Maven = Managing dependecies.
Maven is a build and dependency management tool that allows us to define all our dependencies in a single file.
Spring Boot with Maven
pom.xml file is used to configure a Spring Boot Application. In Spring Boot the file has a parent section with org.springframework.boot
group.
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.5.2</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
This parent section is an important section that pulls all the conventional JARs (dependencies) that Spring Boot assumes we need.
We can add other dependencies using the dependencies
section.
We also have another convenience dependency spring-boot-starter-web
in order to build web applications.
Spring Boot Main Class.
The main class & method is the starting point as Spring boot is a stand-alone app. Its main method is annotated with @SpringBootApplication
annotation. This main method must call the run
method of SpringApplication
class, upon which the following is performed:-
- Sets up default configuration.
- Starts the Spring application context.
- Performs classpath scan.
- Starts Tomcat server.
Spring Controller.
Once we bootstrapped our application and are able to run it, we have to receive requests coming from a user. Requests from users are handled by controllers.
Controllers are a simple java class annotated by @controller
annotation or @RestController
to annotate it as a REST controller. A controller has methods to accept requests coming from users. The request from a user can be a GET
, or POST
request. Or in a conventional RESTful API, the request would be like:-
- GET To request and access resources.
- POST To persist resource.
- PUT To update a persisted resource.
- DELETE To remove a persisted resource.