Bird
Raised Fist0
Spring Bootframework~10 mins

Business logic in services in Spring Boot - Step-by-Step Execution

Choose your learning style10 modes available

Start learning this pattern below

Jump into concepts and practice - no test required

or
Recommended
Test this pattern10 questions across easy, medium, and hard to know if this pattern is strong
Concept Flow - Business logic in services
Controller receives request
Controller calls Service method
Service executes business logic
Service calls Repository for data
Repository interacts with database
Repository returns data to Service
Service processes data and returns result
Controller sends response to client
The controller gets a request and calls the service. The service runs business rules and uses the repository to get or save data. Then the service returns results back to the controller, which sends the response.
Execution Sample
Spring Boot
public String greetUser(String name) {
    if (name == null || name.isEmpty()) {
        return "Hello, Guest!";
    }
    return "Hello, " + name + "!";
}
A service method that returns a greeting message, using business logic to handle empty or null names.
Execution Table
StepInput 'name'Condition (name null or empty?)ActionOutput
1"Alice"falseReturn "Hello, Alice!""Hello, Alice!"
2""trueReturn "Hello, Guest!""Hello, Guest!"
3nulltrueReturn "Hello, Guest!""Hello, Guest!"
💡 Method returns greeting based on input name; stops after return statement.
Variable Tracker
VariableStartStep 1Step 2Step 3
nameundefined"Alice"""null
conditionundefinedfalsetruetrue
outputundefined"Hello, Alice!""Hello, Guest!""Hello, Guest!"
Key Moments - 2 Insights
Why does the method return "Hello, Guest!" when the name is empty or null?
Because the condition checks if name is null or empty (see execution_table rows 2 and 3). If true, it returns the default greeting to handle missing input gracefully.
What happens if the name is a normal string like "Alice"?
The condition is false (execution_table row 1), so the method returns a personalized greeting using the input name.
Visual Quiz - 3 Questions
Test your understanding
Look at the execution table, what is the output when the input name is "" (empty string)?
A"Hello, !"
B"Hello, Guest!"
Cnull
D"Hello, null!"
💡 Hint
Check execution_table row 2 for input "" and see the output column.
At which step does the condition 'name == null || name.isEmpty()' evaluate to true?
AStep 1
BStep 2
CNone
DStep 3
💡 Hint
Look at the condition column in execution_table rows 2 and 3.
If the input name is "Bob", what will the output be?
A"Hello, Guest!"
B"Hello, null!"
C"Hello, Bob!"
D"Hello, !"
💡 Hint
Refer to execution_table row 1 where input is a non-empty string.
Concept Snapshot
Business logic in services:
- Services contain core rules and decisions.
- Controllers call services, not handle logic.
- Services use repositories for data access.
- Example: check input, return greeting.
- Keeps code organized and testable.
Full Transcript
In Spring Boot, business logic lives in service classes. When a controller gets a request, it calls a service method. The service runs the logic, like checking if a name is empty or null. If so, it returns a default greeting. Otherwise, it returns a personalized greeting. The service may call a repository to get or save data. This separation keeps code clean and easy to maintain.

Practice

(1/5)
1. In Spring Boot, where should the main business logic of an application be placed?
easy
A. Inside a class annotated with @Service
B. Directly inside the controller methods
C. Within the repository interfaces
D. In the main application class

Solution

  1. Step 1: Understand Spring Boot layering

    Controllers handle HTTP requests, repositories handle data access, and services contain business logic.
  2. Step 2: Identify the correct annotation for business logic

    The @Service annotation marks classes that hold business logic in Spring Boot.
  3. Final Answer:

    Inside a class annotated with @Service -> Option A
  4. Quick Check:

    Business logic = @Service class [OK]
Hint: Business logic goes in @Service classes, not controllers or repos [OK]
Common Mistakes:
  • Putting business logic in controllers
  • Adding logic inside repository interfaces
  • Mixing business logic in the main application class
2. Which of the following is the correct way to declare a service class in Spring Boot?
easy
A. @Service public class UserService {}
B. public class UserService {}
C. @Repository public class UserService {}
D. @Controller public class UserService {}

Solution

  1. Step 1: Recognize the annotation for service classes

    Spring Boot uses @Service to mark service classes that contain business logic.
  2. Step 2: Check the options for correct annotation

    Only @Service public class UserService {} uses @Service correctly on the class declaration.
  3. Final Answer:

    @Service public class UserService {} -> Option A
  4. Quick Check:

    Service class = @Service annotation [OK]
Hint: Use @Service annotation to mark service classes [OK]
Common Mistakes:
  • Using @Repository or @Controller instead of @Service
  • Forgetting to add any annotation
  • Placing @Service on interfaces instead of classes
3. Given the following service method, what will be the output when calculateDiscount(150) is called?
public class DiscountService {
    public int calculateDiscount(int price) {
        if (price > 100) {
            return price * 20 / 100;
        } else {
            return price * 10 / 100;
        }
    }
}
medium
A. 20
B. 30
C. 10
D. 15

Solution

  1. Step 1: Check the input value and condition

    The input price is 150, which is greater than 100, so the first branch applies.
  2. Step 2: Calculate the discount

    Discount = 150 * 20 / 100 = 30, but since integer division is used, it remains 30.
  3. Final Answer:

    30 -> Option B
  4. Quick Check:

    Price > 100 -> 20% discount = 30 [OK]
Hint: Check conditions carefully and do integer math for discounts [OK]
Common Mistakes:
  • Choosing 20 thinking it's the percentage, not the amount
  • Confusing the else branch discount
  • Ignoring integer division effects
4. Identify the error in this service class code snippet:
@Service
public class OrderService {
    @Autowired
    private OrderRepository orderRepository;

    public void saveOrder(Order order) {
        orderRepository.save(order)
    }
}
medium
A. Service class must extend a base class
B. OrderRepository should not be autowired
C. Missing semicolon after orderRepository.save(order)
D. Method saveOrder should return a value

Solution

  1. Step 1: Review the method syntax

    The line orderRepository.save(order) is missing a semicolon at the end.
  2. Step 2: Validate other parts

    Autowired is correct, service classes don't need to extend base classes, and void return is allowed.
  3. Final Answer:

    Missing semicolon after orderRepository.save(order) -> Option C
  4. Quick Check:

    Missing semicolon = syntax error [OK]
Hint: Check for missing semicolons in method calls [OK]
Common Mistakes:
  • Thinking @Autowired is wrong here
  • Assuming service classes must extend something
  • Believing void methods must return a value
5. You want to add a new feature: calculate the total price after applying a discount and tax in your service. Which approach best follows Spring Boot's business logic principles?
public class PricingService {
    private final DiscountService discountService;
    private final TaxService taxService;

    public PricingService(DiscountService discountService, TaxService taxService) {
        this.discountService = discountService;
        this.taxService = taxService;
    }

    public double calculateFinalPrice(double price) {
        // Fill in logic here
    }
}
hard
A. Add calculation logic directly in the main application class
B. Calculate discount and tax inside controller, then call PricingService with final value
C. Put all calculation logic inside the repository layer
D. Implement calculateFinalPrice to call discountService and taxService methods, then combine results

Solution

  1. Step 1: Understand separation of concerns

    Business logic should be inside service classes, not controllers, repositories, or main class.
  2. Step 2: Use existing services inside PricingService

    Calling discountService and taxService methods inside calculateFinalPrice keeps logic modular and reusable.
  3. Final Answer:

    Implement calculateFinalPrice to call discountService and taxService methods, then combine results -> Option D
  4. Quick Check:

    Business logic in services, reuse other services [OK]
Hint: Keep logic in services and reuse other services for clean code [OK]
Common Mistakes:
  • Putting logic in controller or repository layers
  • Mixing logic in main application class
  • Duplicating discount and tax logic outside services