In this tutorial we'll learn how to build testable Spring beans and get to know the tools that Spring Boot by default imports for writing maintainable unit tests.| reflectoring.io
An intro to Mockito and how to use it with Spring Boot.| reflectoring.io
In this article, we will get familiar with JUnit 5 functional interfaces. JUnit 5 significantly advanced from its predecessors. Features like functional interfaces can greatly simplify our work once we grasp their functionality.| Reflectoring - Where the HOW meets the WHY
Spring Security provides a comprehensive set of security features for Java applications, covering authentication, authorization, session management, and protection against common security threats such as CSRF (Cross-Site Request Forgery).| Reflectoring - Where the HOW meets the WHY
In this step-by-step guide, we’ll create, publish, and manage an NPM package using TypeScript for better code readability and scalability. We’ll write test cases with Jest and automate our NPM package versioning and publishing process using Changesets and GitHub Actions.| Reflectoring - Where the HOW meets the WHY
When building web applications that involve file uploads or downloads, a common approach is to have the files pass through an application server.| Reflectoring - Where the HOW meets the WHY
Introduction to Functional Programming Functional programming is a paradigm that focuses on the use of functions to create clear and concise code.| Reflectoring - Where the HOW meets the WHY
Configuring Apache HttpClient is essential for tailoring its behavior to meet specific requirements and optimize performance. From setting connection timeouts to defining proxy settings, configuration options allow developers to fine-tune the client’s behavior according to the needs of their application.| Reflectoring - Where the HOW meets the WHY
In this article, we are going to learn about the async APIs offered by Apache HttpClient. We are going to explore the different ways Apache HttpClient enables developers to send and receive data over the internet in asynchronous mode.| Reflectoring - Where the HOW meets the WHY
In this article, we are going to learn about the classic APIs offered by Apache HttpClient. We are going to explore the different ways Apache HttpClient helps us to send and receive data over the internet in classic (synchronous) mode.| Reflectoring - Where the HOW meets the WHY
In this article series, we’re going to explore Apache HTTPClient APIs. We’ll get familiar with the different ways Apache HttpClient enables developers to send and receive data over the internet.| Reflectoring - Where the HOW meets the WHY
In this article, we are going to learn about reactive APIs offered by Apache HttpClient APIs. We are going to explore how to use reactive, full-duplex HTTP/1.| Reflectoring - Where the HOW meets the WHY
In modern web applications, storing and retrieving files has become a common requirement. Whether it is user uploaded content like images and documents or application generated logs and reports, having a reliable and scalable storage solution is crucial.| Reflectoring - Where the HOW meets the WHY
In the realm of object-oriented programming (OOP), Kotlin stands out as an expressive language that seamlessly integrates modern features with a concise syntax.| Reflectoring - Where the HOW meets the WHY
In an event-driven architecture where multiple microservices need to communicate with each other, the publisher-subscriber pattern provides an asynchronous communication model to achieve this.| Reflectoring - Where the HOW meets the WHY
Endpoints or APIs that perform complex computations and handle large amounts of data face several performance and responsiveness challenges. This occurs because each request initiates a computation or data retrieval process from scratch, which can take time.| Reflectoring - Where the HOW meets the WHY
Bubble Sort, a basic yet instructive sorting algorithm, takes us back to the fundamentals of sorting. In this tutorial, we’ll look at the Kotlin implementation of Bubble Sort, understanding its simplicity and exploring its limitations.| Reflectoring - Where the HOW meets the WHY
Sorting is a fundamental operation in computer science and Quick Sort stands out as one of the most efficient sorting algorithms.| Reflectoring - Where the HOW meets the WHY
Sorting is a fundamental operation in computer science, and there are various algorithms to achieve it. One such simple yet effective algorithm is Selection Sort.| Reflectoring - Where the HOW meets the WHY
One of the standout features that sets Kotlin apart is its robust approach to null safety. Null safety is a critical aspect of programming languages, aiming to eliminate the notorious null pointer exceptions that often plague developers.| Reflectoring - Where the HOW meets the WHY
Sorting is a fundamental operation that plays a crucial role in various applications. Among the many sorting algorithms, merge sort stands out for its efficiency and simplicity.| Reflectoring - Where the HOW meets the WHY
One of Kotlin’s standout features is extension functions, a mechanism that empowers developers to enhance existing classes without modifying their source code.| Reflectoring - Where the HOW meets the WHY
Java Records introduce a simple syntax for creating data-centric classes, making our code more concise, expressive, and maintainable. In this guide, we’ll explore the key concepts and practical applications of Java Records, providing a step-by-step guide to creating records and sharing best practices for using them effectively in projects.| Reflectoring - Where the HOW meets the WHY
The FasterXML Jackson library is the most popular JSON parser in Java. Spring internally uses this API for JSON parsing. For details on other commonly used Jackson annotations, refer to this article.| Reflectoring - Where the HOW meets the WHY
Google Cloud Pub/Sub employs a publish-subscribe model, streamlining modern software communication and reshaping how information is shared. Publishers send messages to topics, and subscribers interested in those messages can retrieve them flexibly and asynchronously.| Reflectoring - Where the HOW meets the WHY
One of Kotlin’s standout features is its robust support for functions, including high-order functions and inline functions. In this blog post, we will delve into the world of functions in Kotlin, exploring the differences between high-order functions and inline functions and understanding when to leverage each for optimal code efficiency.| Reflectoring - Where the HOW meets the WHY
A design pattern is a general repeatable solution to a commonly occurring problem in software design. In this blog post, we will delve into various design patterns and explore how they can be effectively implemented in Kotlin.| Reflectoring - Where the HOW meets the WHY
Kotlin, a modern JVM programming language, brings a range of features to enhance expressiveness and conciseness. Two key constructs in Kotlin that contribute to its versatility are sealed classes and enum classes.| Reflectoring - Where the HOW meets the WHY
Introduction Java is the only (mainstream) programming language to implement the concept of checked exceptions. Ever since, checked exceptions have been the subject of controversy.| Reflectoring - Where the HOW meets the WHY
Sorting refers to the process of arranging elements in a specific order. The order could be ascending or descending based on certain criteria such as numerical or lexicographical order.| Reflectoring - Where the HOW meets the WHY
Traditional web applications primarily used the HTTP request-response model, where clients sent requests to servers, and servers responded with data. However, implementing real-time features like live chat, notifications, collaborative tools, etc, was challenging.| Reflectoring - Where the HOW meets the WHY
At its core, Spring is a Dependency Injection framework. Although it now offers a variety of other features that simplify developers' lives, most of these are built on top of the Dependency Injection framework.| Reflectoring - Where the HOW meets the WHY
Spring Boot builds on top of the Spring Framework and provides a wealth of additional features and integrations. To simplify somewhat, one could say that the Spring Framework focuses on functions related to the application context, while Spring Boot provides functions that are needed in many applications running in production or that simplify developer life.| Reflectoring - Where the HOW meets the WHY
Welcome to the exciting world of Spring’s Java Configuration! In this comprehensive guide, we will learn Spring’s Java-based configuration. We will get familiar with core annotations like @Bean and @Configuration.| Reflectoring - Where the HOW meets the WHY
Web application development is a critical domain for businesses and developers. Building web applications that are efficient, scalable, and easy to maintain is a challenging task.| Reflectoring - Where the HOW meets the WHY
Feign is an open-source Java library that simplifies the process of making web requests. It streamlines the implementation of RESTful web services by providing a higher-level abstraction.| Reflectoring - Where the HOW meets the WHY
Kotest is simply a multi-platform framework used for testing written in Kotlin. In this tutorial, we shall cover the following sub-topics related to the Kotest framework: testing with Kotest, testing styles used, grouping Kotest tests with tags, the lifecycle hooks and assertions supported by Kotest.| Reflectoring - Where the HOW meets the WHY
In this article, we’ll discuss all that entails KDoc in Kotlin. KDoc is simply a language used to document code written in Kotlin specifically.| Reflectoring - Where the HOW meets the WHY
Have you ever wondered how public API platforms, payment services, or popular websites such as Medium, Twitter, and others manage that their APIs are not overloaded?| Reflectoring - Where the HOW meets the WHY
In this tutorial, we are going to learn about Ktlint, a linting tool for Kotlin. Ktlint checks the style of our code and also helps us to format it against some guidelines.| Reflectoring - Where the HOW meets the WHY
You and your team have spent countless hours meticulously crafting a groundbreaking application that could propel your Startup to new heights.| Reflectoring - Where the HOW meets the WHY
TypeScript is a superset of JavaScript that adds static typing and other features to the language. Its operators are crucial to understanding the language and writing effective code.| Reflectoring - Where the HOW meets the WHY
“Spaghetti code” has long been an issue in the field of software development. Many developers have discovered the difficulty with deciphering complex tangles of code, which leads to increased delays and frustration for everyone involved.| Reflectoring - Where the HOW meets the WHY
ArchUnit is a Java library to validate your software architecture. The library is well described in its documentation and as its fluent API is pure Java, it’s easy to explore using the code completion in the IDE.| Reflectoring - Where the HOW meets the WHY
Node.js is a popular server-side runtime engine based on JavaScript to build and run web applications. Organizing our source code right from the start is a crucial initial step for building large applications.| Reflectoring - Where the HOW meets the WHY
Choosing a backend and frontend stack for web apps can be a daunting task, as there are numerous options available for backend (Node.| Reflectoring - Where the HOW meets the WHY
The primary purpose of logging in applications is to debug and trace one or more root causes of an unexpected behavior.| Reflectoring - Where the HOW meets the WHY
The Jackson API is one of the best JSON parsers in Java. Spring integrates well with Jackson and with every new Spring release, newer Jackson features get incorporated making the Spring Jackson support more flexible and powerful.| Reflectoring - Where the HOW meets the WHY
REST API is a widely used client-server communication protocol, but it has limitations when dealing with clients such as web, iOS, Android, smart devices, etc.| Reflectoring - Where the HOW meets the WHY
Spring Security is a framework that helps secure enterprise applications. By integrating with Spring MVC, Spring Webflux or Spring Boot, we can create a powerful and highly customizable authentication and access-control framework.| Reflectoring - Where the HOW meets the WHY
One of the most convincing justifications for using the Spring Framework is its extensive transaction support. For transaction management, the Spring Framework offers a stable abstraction.| Reflectoring - Where the HOW meets the WHY
If you’re reading this article, it means you’re already well-versed with JUnit. Let me give you a summary of JUnit - In software development, we developers write code which does something simple as designing a person’s profile or as complex as making a payment (in a banking system).| Reflectoring - Where the HOW meets the WHY
Introduction Sorting is a fundamental operation that plays a crucial role in various applications. Among the many sorting algorithms, merge sort stands out for its efficiency and simplicity.| Reflectoring - Where the HOW meets the WHY
Consider the case where someone provides us with a CSV file containing employee details that have been exported from an employee management application.| Reflectoring - Where the HOW meets the WHY
Whenever we deploy a new version of an application, we may break things or the users may not like the changes.| Reflectoring - Where the HOW meets the WHY
Inversion of control (IoC) is simply providing a callback (reaction) to an event that might happen in a system. In other words, instead of executing some logic directly, we invert the control to that callback whenever a specific event occurs.| Reflectoring - Where the HOW meets the WHY
Teams looking to control and reduce their cloud costs can choose from multiple cloud cost management approaches. All of them require at least a basic understanding of what’s going on in your cloud infrastructure - this part relies on monitoring and reporting.| Reflectoring - Where the HOW meets the WHY
How to design a URL shortening service like tinyurl.com is a frequently asked question in system design interviews. URL shortener services convert long URLs into significantly shorter URL links.| Reflectoring - Where the HOW meets the WHY
Development teams, nowadays, can deliver quick value to consumers with far less risk with the help of feature flag-driven development.| Reflectoring - Where the HOW meets the WHY
Feature flags, in their simplest form, are just if conditions in your code that check if a certain feature is enabled or not.| Reflectoring - Where the HOW meets the WHY
What is AOP? Aspect Oriented Programming (AOP) is a programming paradigm aiming to extract cross-cutting functionalities, such as logging, into what’s known as “Aspects”.| Reflectoring - Where the HOW meets the WHY
Continuous Deployment is the state-of-the-art way to ship software these days. Often, however, it’s not possible to practice continuous deployment because the context doesn’t allow it (yet).| Reflectoring - Where the HOW meets the WHY
It is common to encounter applications that run in different time zones. Handling date and time operations consistently across multiple layers of an application can be tricky.| Reflectoring - Where the HOW meets the WHY
Have you ever wanted to perform a specific task on your application server at specific times without physically running them yourself?| Reflectoring - Where the HOW meets the WHY
Rolling out new features is one of the most satisfying parts of our job. Finally, users will see the new feature we’ve worked on so hard!| Reflectoring - Where the HOW meets the WHY
Putting your code behind a feature flag means that you can deploy unfinished changes. As long as the feature flag is disabled, the changes are not having an effect.| Reflectoring - Where the HOW meets the WHY
Time-based features in a software application are a pain to test. To test such a feature, you can (and should) write unit tests, of course.| Reflectoring - Where the HOW meets the WHY
AWS Step Functions is a serverless orchestration service by which we can combine AWS Lambda functions and other AWS services to build complex business applications.| Reflectoring - Where the HOW meets the WHY
Logging is used to provide accurate context about what occurs in our application, it is the documentation of all events that happen within an application.| Reflectoring - Where the HOW meets the WHY
Most of the web today exchanges data in JSON format. Web servers, web and mobile applications, even IoT devices all talk with each other using JSON.| Reflectoring - Where the HOW meets the WHY
Coroutines are a design pattern for writing asynchronous programs for running multiple tasks concurrently. In asynchronous programs, multiple tasks execute in parallel on separate threads without waiting for the other tasks to complete.| Reflectoring - Where the HOW meets the WHY
Gradle is a build automation tool that supports multi-language development. It is helpful to build, test, publish, and deploy software on any platform.| Reflectoring - Where the HOW meets the WHY
Amazon CloudFront is a fast content delivery network (CDN) service that securely delivers data, videos, applications, and APIs to customers globally with low latency.| Reflectoring - Where the HOW meets the WHY
When we define multi-layered architectures, we often tend to represent data differently at each layer. The interactions between each layer become quite tedious and cumbersome.| Reflectoring - Where the HOW meets the WHY
Back-end server resources like databases often contain data that is critical for an application to function consistently. So these resources are protected from public access over the internet by placing them in a private subnet.| Reflectoring - Where the HOW meets the WHY
Making API calls is integral to most applications and while doing this we use an HTTP client usually available as an external library.| Reflectoring - Where the HOW meets the WHY
Developers use HTTP Clients to communicate with other applications over the network. Over the years, multiple HTTP Clients have been developed to suit various application needs.| Reflectoring - Where the HOW meets the WHY
Microservices are meant to be adaptable, scalable, and highly performant so that they can be more competitive to the other products in the market.| Reflectoring - Where the HOW meets the WHY
A stream is a sequence of elements on which we can perform different kinds of sequential and parallel operations. The Stream API was introduced in Java 8 and is used to process collections of objects.| Reflectoring - Where the HOW meets the WHY
Amazon Elastic Compute Cloud (EC2) is a compute service with which we can create virtual machines in the AWS Cloud. We can configure the computing capacity of an EC2 instance and attach different types and capacities of storage which we can further scale up or down to handle changes in server load and consumer traffic, thereby reducing our need to forecast the capacity for investing in hardware upfront.| Reflectoring - Where the HOW meets the WHY
Error handling functions in an application detect and capture multiple error conditions and take appropriate remedial actions to either recover from those errors or fail gracefully.| Reflectoring - Where the HOW meets the WHY
Project Lombok is a popular library that helps us to write clear, concise, and less repetitive Java code. However, among the developer community, it has been both embraced and criticized for reasons I would like to elaborate here.| Reflectoring - Where the HOW meets the WHY
In a distributed, fast-paced environment, dev teams often want to find out at what time they deployed the app, what version of the app they deployed, what Git commit was deployed, and more.| Reflectoring - Where the HOW meets the WHY
In this article, we will build a production-grade application with Spring Boot. After understanding the use case and requirements, we will implement the application layer by layer.| Reflectoring - Where the HOW meets the WHY
Amazon Kinesis is a family of managed services for collecting and processing streaming data in real-time. Stream processing platforms are an integral part of the Big Data ecosystem.| Reflectoring - Where the HOW meets the WHY
Spring Shell allows us to build a command line (shell) application using the Spring framework and all the advantages it provides.| Reflectoring - Where the HOW meets the WHY
In this article, we will learn how to use CompletableFuture to increase the performance of our application. We’ll start with looking at the Future interface and its limitations and then will discuss how we can instead use the CompletableFuture class to overcome these limitations.| Reflectoring - Where the HOW meets the WHY
A module system allows us to split up our code in different parts or to include code written by other developers.| Reflectoring - Where the HOW meets the WHY
Amazon Simple Queue Service (SQS) is a fully managed message queuing service that enables decoupling and communication between the components of a distributed system.| Reflectoring - Where the HOW meets the WHY
An annotation is a construct associated with Java source code elements such as classes, methods, and variables. Annotations provide information to a program at compile time or at runtime based on which the program can take further action.| Reflectoring - Where the HOW meets the WHY
NullPointerExceptions (often shortened as “NPE”) are a nightmare for every Java programmer. We can find plenty of articles on the internet explaining how to write null-safe code.| Reflectoring - Where the HOW meets the WHY
Collections are containers to group multiple items in a single unit. For example, a collection can represent a stack of books, products of a category, a queue of text messages, etc. They are an essential feature of almost all programming languages, most of which support different types of collections such as List, Set, Queue, Stack, etc. In this article, we will look at some logical operations on Java Collections.| reflectoring.io
An in-depth look at the responsibilities of a Spring Boot web controller and how to cover those responsibilities with meaningful tests.| reflectoring.io
A tutorial on when and how to use Spring Boot's @SpringBootTest annotation and how to reduce test runtime.| reflectoring.io
An in-depth tutorial about Spring Boot's support for testing JPA database queries.| reflectoring.io
Some thoughts about validation in general, Bean Validation in particular, and why I consider some applications of Bean Validation an anti-pattern.| reflectoring.io
Retry is a very useful pattern to handle remote operation failures. This article is a deep dive into the Resilience4j retry module and shows why, when and how to use it to build resilient applications.| reflectoring.io
A deep dive into the Resilience4j ratelimiter module. This article shows why, when and how to use it to build resilient applications.| reflectoring.io
Next up in the Resilience4j series - this article explains the Bulkhead module and how to use it to build resilient applications.| reflectoring.io