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

Как хорошо знаешь Spring

1.3 Junior🔥 281 комментариев
#Spring Boot и Spring Data#Spring Framework

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

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

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

Spring Framework - полное руководство для Java разработчика

Spring Framework - это один из самых популярных и мощных фреймворков в Java экосистеме. За более чем 20 лет разработки он стал стандартом для создания enterprise приложений.

Основные принципы Spring

Dependency Injection (DI) - ключевой принцип Spring. Вместо того чтобы класс создавал свои зависимости, Spring инжектирует их через конструктор, setter или поле.

@Component
public class UserService {
  private final UserRepository userRepository;
  
  // Constructor injection - рекомендуемый способ
  public UserService(UserRepository userRepository) {
    this.userRepository = userRepository;
  }
  
  public User getUserById(Long id) {
    return userRepository.findById(id).orElse(null);
  }
}

Inversion of Control (IoC) контейнер управляет жизненным циклом объектов и их взаимодействием.

Spring Boot

Spring Boot упростил создание Spring приложений, убрав необходимость в сложной конфигурации XML. Теперь достаточно аннотаций и application.properties.

@SpringBootApplication
public class Application {
  public static void main(String[] args) {
    SpringApplication.run(Application.class, args);
  }
}

Spring MVC для веб-приложений

Spring MVC следует паттерну Model-View-Controller. REST контроллеры обрабатывают HTTP запросы:

@RestController
@RequestMapping("/api/users")
public class UserController {
  private final UserService userService;
  
  public UserController(UserService userService) {
    this.userService = userService;
  }
  
  @GetMapping("/{id}")
  public ResponseEntity<UserDTO> getUserById(@PathVariable Long id) {
    User user = userService.getUserById(id);
    return ResponseEntity.ok(new UserDTO(user));
  }
  
  @PostMapping
  public ResponseEntity<UserDTO> createUser(@RequestBody CreateUserRequest request) {
    User user = userService.createUser(request);
    return ResponseEntity.status(HttpStatus.CREATED).body(new UserDTO(user));
  }
  
  @DeleteMapping("/{id}")
  public ResponseEntity<Void> deleteUser(@PathVariable Long id) {
    userService.deleteUser(id);
    return ResponseEntity.noContent().build();
  }
}

Spring Data JPA

Упрощает работу с базой данных через ORM. Нужно просто объявить интерфейс репозитория:

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

public interface UserRepository extends JpaRepository<User, Long> {
  Optional<User> findByEmail(String email);
  List<User> findByNameContaining(String name);
}

Аннотации Spring

@Component - базовая аннотация для любого управляемого компонента @Service - для бизнес-логики @Repository - для работы с данными @Controller/@RestController - для обработки HTTP запросов @Autowired - инъекция зависимостей (хотя constructor injection предпочтительнее) @Transactional - управление транзакциями БД @Validated - валидация данных

Spring Security

Основная библиотека для аутентификации и авторизации:

@Configuration
@EnableWebSecurity
public class SecurityConfig {
  @Bean
  public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
    http
      .authorizeHttpRequests(auth -> auth
        .requestMatchers("/api/public/**").permitAll()
        .requestMatchers("/api/admin/**").hasRole("ADMIN")
        .anyRequest().authenticated()
      )
      .httpBasic();
    return http.build();
  }
}

Жизненный цикл Bean

Spring Bean имеет определенные этапы жизни: создание, инициализация, использование, уничтожение. Можно подписаться на события через интерфейсы или аннотации @PostConstruct/@PreDestroy.

Уровень владения

Я хорошо знаю Spring и постоянно работаю с:

  • Spring Boot для создания микросервисов
  • Spring MVC и REST контроллеры
  • Spring Data JPA для работы с БД
  • Spring Security для защиты приложений
  • Spring Cloud для распределенных систем
  • Написание unit тестов с Spring Test

Spring экосистема очень обширна, но основные концепции я применяю ежедневно в production коде.