Spring Boot Notes
What is Spring Framework?
Before we proceed with the definition letβs first understand what is framework.
Framework in software industry, is an environment where we can see collection of reusable software components or tools which are used to build the applications more efficiently with minimal code and time. It makes the developers life easier.
For example, If we are going to travel and stay in some place: furnished flat will be preferable than setting-up a new home. All available ready-made to pick-up and use. Another example LibreOffice Draw where you can draw, paint or creating logo. Here We will have set of drawing tools, just pick up and use it.
Definition:
Spring is a comprehensive framework, provides a broad set of tools and solutions for almost all kind of application development, whether you are building a small standalone application or a complex enterprise system, in particular web applications.
What is Spring Boot?
Spring Boot is a layer on top of Spring that simplifies application development, making the developer to focus mostly on the business logic and leaving all boiler plate codes to the spring boot framework.
Spring vs SpringBoot:
The main difference is in Spring the developer have the higher responsibility (or must be an Advanced Developer) to handle all work step by step (obviously will take more time) whereas with SpringBoot, we can do the same stuff very easily, quickly and safely (We can do with Spring also, but here SpringBoot will takes care of lot of tasks and minimize the coderβs work)
Ex. Spring β Birthday party event arranging by parents. (Each activity should be taken care of, like venue, invitation, cakes, decoration, food arrangements, return gifts etc.)
Spring Boot β An event organizer will take care of everything, so the parents just concentrate on the child and guests (like business logic) β whatever they want event organizer(spring boot) will assist by providing it.
What are Spring Bootβs Advantages?
Spring Boot is a layer on top of Spring that simplifies application development by providing the following:
- Faster Setup (Based on the dependencies and annotations).
- Simplifies development by Auto Configuration, application.properties or application.yml
- Embedded web servers with our finished product (.jar/.war)-eliminates the need for an external server like Tomcat to run the application, during deployment.
- Production-Ready features (Ex. Health checks-monitor applicationβs health, logging etc.)
- Simplified Deployment.
- Opinionated defaults. (TBD)
- Security features.
- Community and Ecosystem
Spring Frameworkβs main advantages are,
β Inversion of Control
β Dependency Injection
IoC (Inversion of Control):
The core principle of the Spring Framework. Usually the program flow or developer will control the execution here as the name suggests, control reversed, ie framework controls the flow. Ex. The event organizer having everything whatever the party or parent needs. It makes the developers with minimal code and better organized.
It makes everything ready to build the application instead searching or creating whenever required . My understanding here is,
- It scans the dependencies β based on that creates the required bean, checks the required .jar files are available in the class path.
- Through dependency injection passing beans as parameter to another bean when @Autowired detected.
Spring Boot starts and initializes the IoC container (via ApplicationContext
β its the container for all beans).IoC scans the classpath for annotated classes like @Component
, @Service
, @Controller
, @Repository.It creates beans (objects) for those classes and makes them available for dependency injection.Spring Boot scans application.properties
or application.yml
, applying those configurations to the beans or the application as needed.
Dependency Injection (DI):
βA design pattern that reduces the connection between the system components making the code more modular, maintainable and testable. It avoids the tight coupling between the classes and make the classes loosely coupled.
Coupling here is one class depends on another class.
For ex. In the same birthday party, if the parents arranged the setup one one theme (Dora-Bujju) for the kid and later the kid changed its mind set and asking for another theme (Julie β Jackie Chan). Now its a wastage of time and money, and parentβs frustration also. Instead, if they tell the organizer to change the theme (as its their work and having some days also) β its easily getting updated.
In Dependency Injection, we can consider like one class wants to use another class, then it should not use its object (bean) directly inside the body (Tight coupling). Future modification is getting tougher here, instead, just pass the bean (object) as a parameter (injecting that bean) into the required class (Constructor DI). In case if the injected bean (passed object as a parameter) wants to get changed in the future, just replace it with another bean(object) in the parameter section.
To Be Continuedβ¦
Reference: https://docs.spring.io/spring-framework/docs/3.2.x/spring-framework-reference/html/mvc.html