The Basics of Spring Framework — Getting Started with Java’s Most Popular Framework

Alexander Obregon
4 min readMar 30, 2023

--

Image Source

Introduction

Spring Framework is an open-source, lightweight Java framework that simplifies the development process for enterprise applications. It provides a flexible infrastructure that enables developers to easily create scalable, modular, and testable applications. In this article, we will take a look at the basics of Spring Framework, including its core components and how to get started with a simple Spring application.

Why Spring Framework?

Spring Framework has become the go-to choice for Java developers for several reasons:

  • Simplifies the development process with its modular architecture
  • Facilitates easy integration with other Java frameworks and libraries
  • Provides built-in support for database access and transactions
  • Enhances application security through various mechanisms

Core Components of Spring Framework

Dependency Injection and Inversion of Control

Spring Framework promotes loose coupling between components through Dependency Injection (DI) and Inversion of Control (IoC). With DI, an object receives its dependencies from an external source, which makes it easier to test and maintain the application. The IoC container in Spring manages the lifecycle of objects and their dependencies.

Example:

Consider a simple MessageService interface and its implementation EmailMessageService.

public interface MessageService {
void sendMessage(String message, String recipient);
}

public class EmailMessageService implements MessageService {
@Override
public void sendMessage(String message, String recipient) {
// Implement email sending logic here
}
}

Now, let’s create a NotificationService class that uses the MessageService to send notifications.

public class NotificationService {
private MessageService messageService;

public NotificationService(MessageService messageService) {
this.messageService = messageService;
}

public void sendNotification(String message, String recipient) {
messageService.sendMessage(message, recipient);
}
}

With dependency injection, we can easily change the message service implementation without modifying the NotificationService class.

Aspect-Oriented Programming (AOP)

Aspect-Oriented Programming (AOP) is a programming paradigm that enables the separation of cross-cutting concerns, such as logging, security, and transaction management. Spring Framework provides built-in support for AOP through Spring AOP module, allowing developers to easily implement cross-cutting concerns in a modular way.

Spring MVC

Spring MVC is a web application framework that follows the Model-View-Controller (MVC) design pattern. It simplifies the development of web applications by providing a clean separation of concerns and a comprehensive set of features to handle request processing, form handling, and data validation.

Data Access and Integration

Spring Framework provides extensive support for database access and integration with ORM frameworks like Hibernate, JPA, and more. It offers a consistent and straightforward programming model for data access, simplifying database-related tasks and reducing boilerplate code.

Setting Up Your Environment

To get started with Spring Framework, you need to have the following installed:

  • Java Development Kit (JDK) 8 or later
  • Apache Maven or Gradle (for build and dependency management)

You can also use Spring Boot, a sub-project of Spring Framework, to simplify the setup and configuration process.

Creating a Simple Spring Application

Let’s create a simple Spring application using Spring Boot. First, create a new Maven project with the following pom.xml file:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>

<groupId>com.example</groupId>
<artifactId>spring-demo</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>jar</packaging>

<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.5.5</version>
<relativePath/>
</parent>

<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
</dependencies>

<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>

Now, create a Main class with a main method to run the application:

package com.example.springdemo;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class Main {
public static void main(String[] args) {
SpringApplication.run(Main.class, args);
}
}

Finally, create a configuration class to wire up the dependencies:

package com.example.springdemo;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class AppConfig {
@Bean
public MessageService emailMessageService() {
return new EmailMessageService();
}

@Bean
public NotificationService notificationService(MessageService messageService) {
return new NotificationService(messageService);
}
}

Now, you can run the application using the following command:

mvn spring-boot:run

Conclusion

We’ve covered the basics of Spring Framework, including its core components and how to set up a simple Spring application. Spring Framework simplifies Java development by providing a flexible and modular architecture, making it an excellent choice for building scalable and maintainable applications. As you go deeper into Spring, you’ll discover a wealth of additional features that make it the go-to framework for many Java developers.

  1. Official Spring Framework Documentation
  2. Spring Boot Documentation
  3. Spring Guides
Spring Boot icon by Icons8

--

--

Alexander Obregon

Software Engineer, fervent coder & writer. Devoted to learning & assisting others. Connect on LinkedIn: https://www.linkedin.com/in/alexander-obregon-97849b229/