Как Spring генерирует имя бина, если оно не задано явно?

«Как Spring генерирует имя бина, если оно не задано явно?» — вопрос из категории Spring, который задают на 10% собеседований Java Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Если имя бина не указано явно в аннотации (например, @Component("myBean")), Spring генерирует его автоматически, используя стратегию декапитализации (lowercase first letter) имени класса.

Правила генерации имени:

  1. Для обычного класса: имя бина = имя класса с приведением первой буквы к нижнему регистру.
  2. Для классов, имя которых начинается с двух или более заглавных букв (например, URLService), имя бина сохраняется как есть (т.е., URLService), что является особым случаем.

Примеры:

@Service
public class PaymentService {} // Имя бина: "paymentService"

@Repository
public class UserRepositoryImpl {} // Имя бина: "userRepositoryImpl"

@Component
public class APIHandler {} // Имя бина: "APIHandler" (особый случай)

Важно: Если в контексте существует несколько бинов одного типа, необходимо задавать им уникальные имена явно, иначе возникнет конфликт.