Новое:Talanto осенью: поиск с цифрами, вакансия по шагам и каталог компаний

+1 137новых вакансий за сутки·64 958вакансий открыто сейчас·Новое:Talanto осенью: поиск с цифрами, вакансия по шагам и каталог компаний

Новые вакансии в TelegramРаботодателям
Talanto
Вакансии
Компании5 953
РезюмеAIПодготовкаСтатьи
ТарифыТарифы
Войти

Не нашли подходящее?

Пусть нужная вакансия найдёт вас сама.

  1. Подборка в TelegramНовые вакансии по вашему фильтру — сразу в бота.Подключить
  2. Мэтчи по резюмеЗагрузите резюме — покажем, где вы подходите лучше всего.Загрузить
  3. Сохранить фильтрНастройте поиск один раз и возвращайтесь к новым вакансиям.Настроить
Что нового на TalantoTalanto осенью: поиск с цифрами, вакансия по шагам и каталог компаний

Для работодателей

Опубликуйте вакансию — отклики придут в ваш кабинет.

  1. Вакансиябесплатно
  2. Откликиконтакты бесплатно
  3. Наймэтапы и интервью

40 компаний публикуют вакансии напрямую · 4 394 кандидата открыты к предложениям

Разместить вакансию

Популярные направления

Все подборки
  • Python13 555
  • Облачные технологии9 649
  • QA вакансии2 810
  • Android1 650
  • Инженер данных1 068
  • Продакт-менеджер414

Разработка

  • Backend вакансии1 534
  • iOS1 533
  • AI вакансии749
  • Fullstack вакансии623
  • Frontend вакансии536
  • Mobile вакансии28

По стеку

  • Go7 558
  • Java4 778
  • Node.js1 528
  • Kotlin1 348
  • Rust1 252
  • .NET1 154
  • PHP506
  • C++327
  • C#314

DevOps и инфраструктура

  • Kubernetes5 503
  • Linux-инфраструктура4 223
  • DevOps вакансии4 089
  • Terraform / IaC3 059
  • Мониторинг и Observability1 414
  • CI/CD1 240
  • SRE411
  • Кибербезопасность61

Аналитика и данные

  • Аналитик данных612
  • Бизнес-аналитик572
  • Data Scientist528
  • Системный аналитик69

Другие направления

  • Проджект-менеджер147
  • UI/UX дизайн80
  • Ручное тестирование14

По регионам

  • Вакансии в США30 650
  • Вакансии в Европе12 551
  • Работа в России3 510
  • Вакансии в Канаде2 658

По формату

  • Удалённые вакансии48 186
  • Релокация в США30 650
  • Гибридная работа7 410
  • Офисная работа5 407

По уровню

  • Senior вакансии26 826
  • Middle вакансии12 754
  • Junior вакансии4 519

Сейчас нанимают

Все компании
  • Rakuten189 вакансий
  • Wise189 вакансий
  • ASML163 вакансии
  • Grab134 вакансии
  • Celonis47 вакансий
  • Spotify37 вакансий
  • Infobip28 вакансий
  • Adyen27 вакансий
  • Darktrace17 вакансий
  • Monzo17 вакансий

Вакансии из 344 источников: карьерные страницы компаний и джоб-борды.

КомпанииО насНовостиПубличная офертаУсловия использованияПолитика конфиденциальностиПоддержка
←К теме Spring FrameworkВсе вопросы
Spring FrameworkMiddleТеория

Что такое Spring Expression Language (SpEL)?

В закладки
Сначала попробуйте ответить сами30 секунд
Сравнить с ответом ↓

SpEL (Spring Expression Language) — язык выражений Spring для динамического обращения к свойствам бинов, вызова методов и условной логики прямо в аннотациях и XML-конфигурации.

Использование в аннотациях

@Component
public class DiscountService {

    // Значение из другого бина через SpEL
    @Value("#{configBean.discountRate}")
    private double discountRate;

    // Арифметика
    @Value("#{configBean.maxItems * 1.1}")
    private int bufferSize;

    // Условное выражение
    @Value("#{systemProperties['env'] == 'prod' ? 'https://api.example.com' : 'http://localhost:8080'}")
    private String apiUrl;

    // Список строк
    @Value("#{'admin,user,moderator'.split(',')}")
    private List<String> roles;
}

Spring Expression Language (SpEL)

SpEL — мощный язык выражений, встроенный в экосистему Spring. Он позволяет обращаться к свойствам объектов, вызывать методы, выполнять арифметику, работать с коллекциями и условиями прямо в аннотациях, XML-конфигурации и программном коде. SpEL вычисляется во время выполнения, что делает конфигурацию динамической.

Синтаксис: основные конструкции

  • #{beanName.property} — доступ к свойству бина
  • #{T(java.lang.Math).PI} — обращение к статическому члену класса
  • #{systemProperties['user.home']} — системные свойства
  • #{list.?[price > 100]} — фильтрация коллекции
  • #{list.![name]} — проецирование коллекции (извлечение поля)
  • ${property.key} — значение из application.properties (не SpEL, а PropertyPlaceholder)

SpEL в @PreAuthorize (Spring Security)

@PreAuthorize("hasRole('ADMIN') or #userId == authentication.principal.id")
public UserDto getUser(@PathVariable Long userId) { /* ... */ }

@PostAuthorize("returnObject.ownerId == authentication.principal.id")
public Document getDocument(Long docId) { /* ... */ }

SpEL в @Cacheable

// Ключ кэша зависит от поля объекта
@Cacheable(value = "products", key = "#product.category + '-' + #product.id")
public ProductDto getProductInfo(Product product) { /* ... */ }

// Условное кэширование
@Cacheable(value = "reports", condition = "#size > 100")
public List<Report> generateReport(int size) { /* ... */ }

Программное использование SpEL

ExpressionParser parser = new SpelExpressionParser();

// Простое выражение
Expression expr = parser.parseExpression("'Hello World'.toUpperCase()");
String result = expr.getValue(String.class); // "HELLO WORLD"

// Контекст с переменными
StandardEvaluationContext context = new StandardEvaluationContext();
context.setVariable("discount", 0.15);
context.setRootObject(new Product("Laptop", new BigDecimal("1000")));

Expression priceExpr = parser.parseExpression("price * (1 - #discount)");
BigDecimal finalPrice = priceExpr.getValue(context, BigDecimal.class);

Подводные камни

  • SpEL-выражения в @Value вычисляются при создании бина — ошибка в выражении (например, несуществующее свойство) вызовет SpelEvaluationException при старте контекста.
  • #{...} и ${...} — разные механизмы: первый — SpEL, второй — PropertyPlaceholder; их нельзя смешивать произвольно, хотя #{${prop}} работает корректно.
  • В @PreAuthorize SpEL вычисляется через прокси — self-invocation обходит проверку безопасности.
  • Программный StandardEvaluationContext по умолчанию даёт полный доступ к рефлексии Java — в пользовательском вводе это уязвимость RCE; используйте SimpleEvaluationContext для ненадёжных данных.
  • Фильтрация коллекции .?[condition] работает только с List, Map и массивами; для Set без конвертации результаты могут быть неожиданными.
  • Обращение к приватным полям через SpEL требует явного разрешения рефлексии — не работает с модульной системой Java 9+.
  • Сложные SpEL-выражения в аннотациях трудно тестировать изолированно и отлаживать — предпочтительнее выносить логику в отдельные методы бинов.

Частые вопросы на собеседовании

  • Что такое Spring Framework и какие проблемы он решает?
  • Что такое Spring Bean? Как IoC-контейнер Spring управляет бинами?
  • Что такое Spring MVC? Объясните жизненный цикл запроса в DispatcherServlet.
  • Что такое Inversion of Control (IoC) и как Spring его реализует?

Типичные ошибки

  • Путать термин «spring expression language» с соседним механизмом Spring Framework.
  • Не называть границу lifecycle, transaction, thread или request для «spring expression language».
  • Игнорировать production-эффекты «spring expression language»: latency, SQL shape, memory, security или observability.

Что проверяет интервьюер

  • Попросить объяснить механизм «spring expression language» на минимальном примере.
  • Проверить, видит ли кандидат failure mode и диагностику для «spring expression language».
  • Уточнить, какие настройки или API меняют «spring expression language» в реальном сервисе.

Как вы знаете этот вопрос?

Проверить себя по теме Spring Framework →

Источники

  • https://docs.spring.io/spring-framework/reference/core/expressions.html

Связанные темы

Spring Frameworkbackend-designtechnical-communication