Skip to content
cccskills
FreePublished on GitHub

spring-boot-3

Spring Boot 3 patterns for configuration, DI, and web services. Trigger: When building or refactoring Spring Boot 3 applications.

The English summary is being prepared. Showing the original description.

Gentleman-Programming/Gentleman-Skills660 stars(GitHub 660 + cccskills 0)

Run score Not tested

See how to install

Files included (1)

  • SKILL.md3.6 KB

SKILL.md (original)

Review the instructions the agent will receive before you install.

When to Use

Load this skill when:

  • Building a Spring Boot 3.3+ service or API
  • Wiring beans with dependency injection
  • Defining configuration properties and validation
  • Implementing REST controllers and service layers

Critical Patterns

Pattern 1: Constructor injection only

Always use constructor injection; avoid field injection.

Pattern 2: Typed configuration properties

Use @ConfigurationProperties with validation, not scattered @Value.

Pattern 3: Transaction boundaries at service layer

Apply @Transactional on application services, not controllers.

Code Examples

Example 1: Configuration properties with validation

package com.acme.config;

import jakarta.validation.constraints.NotBlank;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.validation.annotation.Validated;

@Validated
@ConfigurationProperties(prefix = "payment")
public record PaymentProperties(
  @NotBlank String provider,
  @NotBlank String apiKey
) { }
package com.acme;

import org.springframework.boot.context.properties.ConfigurationPropertiesScan;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
@ConfigurationPropertiesScan
public class Application { }

Example 2: Service with constructor injection + transaction

package com.acme.order.application;

import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

@Service
public final class OrderService {
  private final OrderRepository repository;

  public OrderService(OrderRepository repository) {
    this.repository = repository;
  }

  @Transactional
  public void placeOrder(OrderCommand command) {
    repository.save(command.toEntity());
  }
}

Example 3: REST controller with DTO records

package com.acme.order.api;

import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;

@RestController
@RequestMapping("/orders")
public final class OrderController {
  private final OrderService service;

  public OrderController(OrderService service) {
    this.service = service;
  }

  @PostMapping
  public ResponseEntity<OrderResponse> place(@RequestBody OrderRequest request) {
    service.placeOrder(request.toCommand());
    return ResponseEntity.ok(new OrderResponse("ok"));
  }

  public record OrderRequest(String sku, int qty) {
    public OrderCommand toCommand() { return new OrderCommand(sku, qty); }
  }

  public record OrderResponse(String status) { }
}

Anti-Patterns

Don't: Use field injection

// BAD: field injection
@Service
public class OrderService {
  @org.springframework.beans.factory.annotation.Autowired
  private OrderRepository repository;
}

Don't: Scatter configuration with @Value

// BAD: hard to validate and test
@Service
public class PaymentService {
  @org.springframework.beans.factory.annotation.Value("${payment.apiKey}")
  private String apiKey;
}

Quick Reference

TaskPattern
Inject dependenciesConstructor injection only
Read config@ConfigurationProperties + @Validated
Transactions@Transactional on services

Resources

Reviews

No reviews yet. Tell others what you thought.

Comments

No login needed. Share how it worked for you, ask a question, or note where it did not run.

No comments yet. Be the first to write one.

Comments are published right away. Do not include personal information such as email addresses or phone numbers. Up to 2 URLs.

0 / 1,000 characters

This form is protected by reCAPTCHA, and the Google Privacy Policy and Terms of Service apply.

More skills from this repository

Vercel AI SDK 5 patterns. Trigger: When building AI chat features - breaking changes from v4.

The English summary is being prepared. Showing the original description.

Gentleman-Programming/Gentleman-Skills660Updated Mar 28, 2026

Angular architecture: Scope Rule, project structure, file naming, style guide. Trigger: When structuring Angular projects or deciding where to place components.

The English summary is being prepared. Showing the original description.

Gentleman-Programming/Gentleman-Skills660Updated Mar 28, 2026

Angular core patterns: standalone components, signals, inject, control flow, zoneless. Trigger: When creating Angular components, using signals, or setting up zoneless.

The English summary is being prepared. Showing the original description.

Gentleman-Programming/Gentleman-Skills660Updated Mar 28, 2026

Angular forms: Signal Forms (experimental) and Reactive Forms. Trigger: When working with forms, validation, or form state in Angular.

The English summary is being prepared. Showing the original description.

Gentleman-Programming/Gentleman-Skills660Updated Mar 28, 2026

Angular performance: NgOptimizedImage, @defer, lazy loading, SSR. Trigger: When optimizing Angular app performance, images, or lazy loading.

The English summary is being prepared. Showing the original description.

Gentleman-Programming/Gentleman-Skills660Updated Mar 28, 2026

Django REST Framework patterns. Trigger: When building REST APIs with Django - ViewSets, Serializers, Filters.

The English summary is being prepared. Showing the original description.

Gentleman-Programming/Gentleman-Skills660Updated Mar 28, 2026

See all skills by Gentleman-Programming

Report a problem with this skill