Size: a a a

Spring Framework and more

2020 June 11

VS

Vitaly Sirotkin in Spring Framework and more
с чего бы нулл по дефолту будет? спринг поищет бин в контексте, не найдет и совершенно справедливо упадет
источник

AL

Aleksander Lemyagov in Spring Framework and more
Сейчас спокойно нулл и все если профиля нет.
источник

AL

Aleksander Lemyagov in Spring Framework and more
Vitaly Sirotkin
с чего бы нулл по дефолту будет? спринг поищет бин в контексте, не найдет и совершенно справедливо упадет
Нит
источник

AL

Aleksander Lemyagov in Spring Framework and more
Vitaly Sirotkin
с чего бы нулл по дефолту будет? спринг поищет бин в контексте, не найдет и совершенно справедливо упадет
Не падает на удивление
источник

VS

Vitaly Sirotkin in Spring Framework and more
и даже UnsatisfiedDependencyException не падает?)
источник

AL

Aleksander Lemyagov in Spring Framework and more
Но спорить не буду. Возможно я что-то не досмотрел или не увидел
источник

VS

Vitaly Sirotkin in Spring Framework and more
ну чудеса.
источник

AL

Aleksander Lemyagov in Spring Framework and more
Спасибо. Полезно
источник

VS

Vitaly Sirotkin in Spring Framework and more
на здоровье)
источник

RS

Ruslan Stelmachenko in Spring Framework and more
Aleksander Lemyagov
Не падает на удивление
А вот это странно. За последние дни уже пару раз такое видел в этом чатике от разных людей. Мол, бина нет, зависимость от него есть, но вместо привычного UnsatisfiedDependencyException при запуске контекста там просто null. При этом required=false тоже нет. Никогда не видел такого поведения. Если у вас правда так, было бы интересно понять, почему.

Как вы инжектите тот бин, который просто становится null-ом, если не найден? Через консруктор, сеттер или @Autowired над полем?
источник

AL

Aleksander Lemyagov in Spring Framework and more
Ruslan Stelmachenko
А вот это странно. За последние дни уже пару раз такое видел в этом чатике от разных людей. Мол, бина нет, зависимость от него есть, но вместо привычного UnsatisfiedDependencyException при запуске контекста там просто null. При этом required=false тоже нет. Никогда не видел такого поведения. Если у вас правда так, было бы интересно понять, почему.

Как вы инжектите тот бин, который просто становится null-ом, если не найден? Через консруктор, сеттер или @Autowired над полем?
Конструктор.
источник

VS

Vitaly Sirotkin in Spring Framework and more
да быть не может. в жизни такого не видел если честно)

если без required=false, офк
источник

RS

Ruslan Stelmachenko in Spring Framework and more
Aleksander Lemyagov
Ну типа хардкодить названия профилей не очень хорошо. Но если профилем выбираем настройку, мы же в любом случае тогда хардкодим название профиля. Тогда почему нельзя использовать название профиля где-то еще.
Не совсем так.

Если профилем выбираем настройку, то мы хардкодим название настройки, а не профиля (хотя название настройки можно не хардкодить, а использовать @ConfigurationProperties биндинг, что рекомендуется в 99% случаев сейчас). Название профиля у нас хардкодится в этом случае только при задании значения свойства spring.profiles.active. В коде оно не нужно.

А гибкость тут появляется в том, что теперь вы в любом профиле можете прописать proxy=true и получите нужное поведение. Частенько это поведение напрямую от названия профиля-то не зависит, даже если сразу кажется, что это так. А потом раз, и внезапно вдруг нужно, чтобы был активен профиль local, но при этом эта настройка все равно была включена. Это можно решать через include доп. профилей, но тогда с доп профилем подтянутся и другие их настройки, а вам вот надо только эта.

Конечно, если вам вот прям вообще такая гибкость не нужна, то можно к имени профиля привязаться. Но лучше тогда сделать это в @Configuration классе, а не бине.

Бины не должны ничего знать ни о каких профилях, это не их область ответственности.
Хотя технически, понятное дело, что можно и так, и так.
источник

VS

Vitaly Sirotkin in Spring Framework and more
Ruslan Stelmachenko
Не совсем так.

Если профилем выбираем настройку, то мы хардкодим название настройки, а не профиля (хотя название настройки можно не хардкодить, а использовать @ConfigurationProperties биндинг, что рекомендуется в 99% случаев сейчас). Название профиля у нас хардкодится в этом случае только при задании значения свойства spring.profiles.active. В коде оно не нужно.

А гибкость тут появляется в том, что теперь вы в любом профиле можете прописать proxy=true и получите нужное поведение. Частенько это поведение напрямую от названия профиля-то не зависит, даже если сразу кажется, что это так. А потом раз, и внезапно вдруг нужно, чтобы был активен профиль local, но при этом эта настройка все равно была включена. Это можно решать через include доп. профилей, но тогда с доп профилем подтянутся и другие их настройки, а вам вот надо только эта.

Конечно, если вам вот прям вообще такая гибкость не нужна, то можно к имени профиля привязаться. Но лучше тогда сделать это в @Configuration классе, а не бине.

Бины не должны ничего знать ни о каких профилях, это не их область ответственности.
Хотя технически, понятное дело, что можно и так, и так.
Руслан, научи так же обстоятельно излагать мысли...
источник

RS

Ruslan Stelmachenko in Spring Framework and more
Vitaly Sirotkin
Руслан, научи так же обстоятельно излагать мысли...
Нужно просто не лениться писать стены текста) А на это не всегда бывает настроение или время. Чаще всего хочется написать в 3х словах, но как правило получается сумбурно и вряд ли понятно. Хоть большинство и не любит стены текста, но без них зачастую никак. )
источник

VS

Vitaly Sirotkin in Spring Framework and more
да, думаю ты прав. если б было чуть менее впадлу расписывать все досконально и с примером - вероятно, у меня получилось бы повествование с аналогичным смыслом. собственно, с твоей позицией по вопросу с профилями я полностью солидарен)
источник

AL

Aleksander Lemyagov in Spring Framework and more
Ruslan Stelmachenko
Не совсем так.

Если профилем выбираем настройку, то мы хардкодим название настройки, а не профиля (хотя название настройки можно не хардкодить, а использовать @ConfigurationProperties биндинг, что рекомендуется в 99% случаев сейчас). Название профиля у нас хардкодится в этом случае только при задании значения свойства spring.profiles.active. В коде оно не нужно.

А гибкость тут появляется в том, что теперь вы в любом профиле можете прописать proxy=true и получите нужное поведение. Частенько это поведение напрямую от названия профиля-то не зависит, даже если сразу кажется, что это так. А потом раз, и внезапно вдруг нужно, чтобы был активен профиль local, но при этом эта настройка все равно была включена. Это можно решать через include доп. профилей, но тогда с доп профилем подтянутся и другие их настройки, а вам вот надо только эта.

Конечно, если вам вот прям вообще такая гибкость не нужна, то можно к имени профиля привязаться. Но лучше тогда сделать это в @Configuration классе, а не бине.

Бины не должны ничего знать ни о каких профилях, это не их область ответственности.
Хотя технически, понятное дело, что можно и так, и так.
Так а разве в конфигурации не надо делать @Profile, если эта конфигурация только с профилем активна? Может я не то понял
источник

VS

Vitaly Sirotkin in Spring Framework and more
Aleksander Lemyagov
Так а разве в конфигурации не надо делать @Profile, если эта конфигурация только с профилем активна? Может я не то понял
конфигурацию можно активировать по @ConditionalOnProperty , а дальше этой пропертей управлять как твоей душе угодно. можно профилем, можно через -Dproperty в строке запуска, можно через переменные среды. получается гораздо гибче.
источник

VS

Vitaly Sirotkin in Spring Framework and more
а чтобы иметь fallback имплементацию твоего сервиса я уже предлагал пользоваться @ConditionalOnMissingBean
источник

VS

Vitaly Sirotkin in Spring Framework and more
собственно это самая частая связка аннотаций которыми я пользуюсь при необходимости такой подмены реализации
источник