Spring: имеет ли имя метода в классе @Configuration какую-либо роль - PullRequest
1 голос
/ 28 февраля 2020
@Configuration
public class AppConfig implements WebMvcConfigurer {

    // ...

    @Bean
    public LocaleResolver localeResolver(){ // other names for this method didn't work
        SessionLocaleResolver slr = new SessionLocaleResolver();
        slr.setDefaultLocale(Locale.US);
        return slr;
    }

}

Выше приведена часть моего класса конфигурации в приложении Spring MVC.

При первом тестировании SessionLocalResolver у меня было имя метода localResolver (обратите внимание на отсутствующий E) что вызвало следующее исключение: Cannot change HTTP accept header – use a different locale resolution strategy

Мое понимание, и, очевидно, я был неправ, что имя метода bean не имеет значения semanti c, которое когда-либо существовало. Но в этом случае использование любого имени, кроме localeResolver, приводит к вышеупомянутым исключениям.

Итак, мой вопрос: какова роль имени метода bean в классе @Configuration? и где это упомянуто в документации Spring?

1 Ответ

2 голосов
/ 28 февраля 2020

Этот указанный c компонент ищется по имени, а не по типу. DispatcherServlet ищет компонент с именем localeResolver и, если он не обнаружен, используется значение по умолчанию AcceptHeaderLocaleResolver. Если вы хотите сохранить исходное имя метода localResolver, вам просто нужно аннотировать его как

@Bean (name = "localeResolver")
public LocaleResolver localResolver() {...}

По умолчанию имя метода bean-компонента будет использоваться в качестве имени bean-компонента, если иное не указано в методе. Я представил выше. Другими словами, роль имени метода бина используется для определения фактического имени бина. Надеюсь это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...