2015-10-12 3 views
4

Я хочу указать пользовательский BeanNamingStrategy при настройке моего приложения с помощью Spring Boot. По умолчанию Spring Boot использует MethodNameStrategy, который является BeanNamingStrategy.Как указать BeanNamingStrategy с Spring Boot?

Причина, по которой я хочу это сделать, состоит в том, что у меня есть абстрактные родительские классы, которые мои потребители будут создавать подклассы конфигурации. Методы родительских классов имеют одинаковые имена друг для друга и поэтому не регистрируются для разных реализаций дочерних классов. В моем обычном BeanNamingStrategy будет добавлено простое имя класса конфигурации для определенных имен компонентов.

Обычно в приложении весны вы можете сдать BeanNamingStrategy с использованием метода setBeanNamingStrategy для ApplicationContext. Однако, если Spring Boot создает ApplicationContext, как я могу это сделать?

ответ

4

У SpringApplicationBuilder есть метод beanNameGenerator(), который позволяет передавать пользовательский генератор.

См. 22.3 Fluent builder API в справочной системе Spring Boot для работы с белым API.


К сожалению, это не поможет, так как это относится только к @Component -Style аннотации классов и не @Bean методов, для которых имена are hard coded с использованием this method.

+0

Спасибо, но 'BeanNameGenerator', кажется, не вызывается для' @ Bean'-аннотированных методов (в классах @ @ Configuration-annotated), только для '@ Component'-аннотированных классов и для' @ Configuration' самозанятых классов. Есть ли другой объект, вызываемый для генерации имен фанов для методов, аннотированных с помощью '@ Bean'? – Kidburla

+0

@ Kidburla это странно, потому что ['ConfigurationClassPostProcessor'] (http://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/context/annotation/ConfigurationClassPostProcessor.html), который отвечает за для оценки классов '@ Configuration' ясно известно о' BeanNameGenerator': http://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/context/annotation/ConfigurationClassPostProcessor.html#setBeanNameGenerator-org. springframework.beans.factory.support.BeanNameGenerator- –

+0

В javadoc, который вы связали, явно говорится: «Обратите внимание, что эта стратегия не * применяется * к методам Bean». Мое понимание заключалось в том, что 'BeanNamingStrategy' использовался для методов« Bean », а« BeanNameGenerator »используется только для разрешения бит из аннотаций на уровне класса. – Kidburla