Sitemap

Member-only story

đźš« Stop Overusing Static Methods: Use Dependency Injection the Right Way

3 min readApr 15, 2025

Static methods are often convenient, especially for utility-style code. But when they’re overused — especially in service or business logic — they quickly lead to code that’s hard to test, hard to mock, and difficult to scale.

If you’ve built a Spring Boot application filled with static service methods, you’re not alone. But there’s a better way: Dependency Injection (DI).

In this article, you’ll learn why overusing static methods is a code smell, and how to replace them with clean, testable, and maintainable design using DI the right way.

❌ What’s Wrong with Overusing Static Methods?

While static methods are okay for stateless utilities, they often become a problem when used in the wrong places.

🚨 Real Problems with Static Methods:

  • ❌ Cannot be mocked in unit tests (without PowerMock or hacks)
  • ❌ Tightly coupled — cannot swap implementations at runtime
  • ❌ Hard to manage shared resources or configuration
  • ❌ Breaks object-oriented principles (no encapsulation or polymorphism)

Let’s look at an example.

👎 Anti-Pattern: Static Service Method

public class EmailService {
public static void sendEmail(String to, String subject) {
// connect, build, send...
System.out.println("Email sent to: " + to);
}
}

Used like this:

EmailService.sendEmail("test@example.com", "Hello");

Why it’s bad:

  • You can’t inject this service into another class
  • You can’t replace or extend the behavior
  • You can’t unit test methods that depend on it

âś… The Clean Way: Use Dependency Injection

Spring (and other DI frameworks) allow you to inject services as dependencies — making your code cleaner, testable, and more modular.

Refactored Service:

@Service
public class EmailService {
public void sendEmail(String to, String subject) {
System.out.println("Email sent to: " + to);
}
}

--

--

Responses (1)