← Назад к вопросам

Какие знаешь Starters в Spring?

1.6 Junior🔥 121 комментариев
#Spring Boot и Spring Data

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI22 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Spring Boot Starters

Spring Boot Starters — это удобные POM зависимости, которые упрощают конфигурацию Maven или Gradle проектов. Они группируют related зависимости и позволяют сразу начать работу с определённой функциональностью.

Основная концепция

Вместо того чтобы вручную добавлять множество зависимостей:

// Плохой подход - множество отдельных зависимостей
<dependency>
  <groupId>org.springframework</groupId>
  <artifactId>spring-webmvc</artifactId>
  <version>5.3.0</version>
</dependency>
<dependency>
  <groupId>com.fasterxml.jackson.core</groupId>
  <artifactId>jackson-databind</artifactId>
  <version>2.13.0</version>
</dependency>
<!-- ... ещё 10-20 зависимостей -->

Мы используем один Starter:

<!-- Хороший подход - один starter -->
<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-web</artifactId>
</dependency>

1. spring-boot-starter-web

Для создания web приложений и RESTful API:

@SpringBootApplication
@RestController
public class Application {
  
  @GetMapping("/hello")
  public String hello() {
    return "Hello World!";
  }
  
  public static void main(String[] args) {
    SpringApplication.run(Application.class, args);
  }
}

Включает:

  • Spring MVC
  • Embedded Tomcat
  • Jackson для JSON обработки

2. spring-boot-starter-data-jpa

Для работы с базами данных через JPA/Hibernate:

@Entity
@Table(name = "users")
public class User {
  
  @Id
  @GeneratedValue(strategy = GenerationType.IDENTITY)
  private Long id;
  
  private String name;
  private String email;
}

@Repository
public interface UserRepository extends JpaRepository<User, Long> {
  List<User> findByEmail(String email);
  
  @Query("SELECT u FROM User u WHERE u.name = :name")
  List<User> customFindByName(@Param("name") String name);
}

@Service
public class UserService {
  
  private final UserRepository userRepository;
  
  public User saveUser(User user) {
    return userRepository.save(user);
  }
}

Включает:

  • Spring Data JPA
  • Hibernate ORM
  • Database integration

3. spring-boot-starter-security

Для аутентификации и авторизации:

@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
  
  @Override
  protected void configure(HttpSecurity http) throws Exception {
    http
      .authorizeRequests()
      .antMatchers("/", "/public/**").permitAll()
      .anyRequest().authenticated()
      .and()
      .formLogin()
      .loginPage("/login")
      .permitAll()
      .and()
      .logout()
      .permitAll();
  }
  
  @Bean
  public PasswordEncoder passwordEncoder() {
    return new BCryptPasswordEncoder();
  }
}

@Service
public class CustomUserDetailsService implements UserDetailsService {
  
  private final UserRepository userRepository;
  
  @Override
  public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
    User user = userRepository.findByUsername(username)
      .orElseThrow(() -> new UsernameNotFoundException("User not found"));
    return new org.springframework.security.core.userdetails.User(
      user.getUsername(),
      user.getPassword(),
      new ArrayList<>()
    );
  }
}

4. spring-boot-starter-data-rest

Автоматическое создание RESTful endpoints для repositories:

// Просто наследуй PagingAndSortingRepository
@RepositoryRestResource(collectionResourceRel = "users", path = "users")
public interface UserRepository extends PagingAndSortingRepository<User, Long> {
  List<User> findByLastName(@Param("name") String name);
}

// Автоматически создаст endpoints:
// GET /users
// POST /users
// GET /users/{id}
// PUT /users/{id}
// DELETE /users/{id}
// GET /users/search/findByLastName?name=Doe

5. spring-boot-starter-amqp

Для работы с RabbitMQ (message broker):

@Configuration
public class RabbitConfig {
  
  public static final String ORDER_QUEUE = "order-queue";
  public static final String ORDER_EXCHANGE = "order-exchange";
  
  @Bean
  public Queue orderQueue() {
    return new Queue(ORDER_QUEUE, true);
  }
  
  @Bean
  public TopicExchange orderExchange() {
    return new TopicExchange(ORDER_EXCHANGE);
  }
  
  @Bean
  public Binding binding(Queue queue, TopicExchange exchange) {
    return BindingBuilder.bind(queue)
      .to(exchange)
      .with("order.*");
  }
}

@Service
public class OrderPublisher {
  
  private final RabbitTemplate rabbitTemplate;
  
  public void publishOrder(Order order) {
    rabbitTemplate.convertAndSend(
      RabbitConfig.ORDER_EXCHANGE,
      "order.created",
      order
    );
  }
}

@Service
public class OrderConsumer {
  
  @RabbitListener(queues = RabbitConfig.ORDER_QUEUE)
  public void consumeOrder(Order order) {
    System.out.println("Received order: " + order.getId());
  }
}

6. spring-boot-starter-validation

Для валидации данных с Bean Validation:

public class UserDTO {
  
  @NotNull(message = "Name cannot be null")
  @Size(min = 2, max = 50, message = "Name must be 2-50 characters")
  private String name;
  
  @NotNull
  @Email(message = "Email should be valid")
  private String email;
  
  @Min(value = 18, message = "Age must be at least 18")
  @Max(value = 120)
  private int age;
}

@RestController
@RequestMapping("/api/users")
public class UserController {
  
  @PostMapping
  public ResponseEntity<UserDTO> createUser(@Valid @RequestBody UserDTO dto) {
    // Валидация выполнится автоматически
    return ResponseEntity.ok(dto);
  }
}

7. spring-boot-starter-logging

Для логирования через SLF4J и Logback:

import lombok.extern.slf4j.Slf4j;

@Slf4j
@Service
public class OrderService {
  
  public Order createOrder(OrderRequest request) {
    log.info("Creating new order for user: {}", request.getUserId());
    try {
      Order order = new Order(request);
      log.debug("Order created with items: {}", order.getItems());
      return order;
    } catch (Exception e) {
      log.error("Failed to create order", e);
      throw e;
    }
  }
}

8. spring-boot-starter-actuator

Для мониторинга и управления приложением:

# application.yml
management:
  endpoints:
    web:
      exposure:
        include: health,info,metrics,prometheus
  endpoint:
    health:
      show-details: always

Основные endpoints:

  • /actuator/health — статус приложения
  • /actuator/metrics — метрики производительности
  • /actuator/info — информация о приложении
  • /actuator/prometheus — метрики для Prometheus

9. spring-boot-starter-test

Для тестирования:

@SpringBootTest
@AutoConfigureMockMvc
public class UserControllerTest {
  
  @Autowired
  private MockMvc mockMvc;
  
  @MockBean
  private UserService userService;
  
  @Test
  public void testGetUser() throws Exception {
    User user = new User(1L, "John", "john@example.com");
    when(userService.findById(1L)).thenReturn(Optional.of(user));
    
    mockMvc.perform(get("/api/users/1"))
      .andExpect(status().isOk())
      .andExpect(jsonPath("$.name").value("John"));
  }
}

Включает:

  • JUnit 5
  • Mockito
  • AssertJ
  • Spring Test

10. Другие популярные Starters

<!-- spring-boot-starter-kafka - Apache Kafka -->
<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-kafka</artifactId>
</dependency>

<!-- spring-boot-starter-webflux - Reactive web -->
<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-webflux</artifactId>
</dependency>

<!-- spring-boot-starter-data-mongodb - MongoDB -->
<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-data-mongodb</artifactId>
</dependency>

<!-- spring-boot-starter-redis - Redis caching -->
<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>

Преимущества использования Starters

  • Быстрый старт — сразу начать разработку
  • Управление версиями — совместимые версии зависимостей
  • Меньше boilerplate — автоконфигурация
  • Best practices — рекомендуемые конфигурации из коробки
  • Гибкость — легко переопределять defaults через application.yml

Spring Boot Starters — это краеугольный камень Spring Boot экосистемы, который делает разработку быстрой и простой.

Какие знаешь Starters в Spring? | PrepBro