Ответ
Если имя бина не указано явно в аннотации (например, @Component("myBean")), Spring генерирует его автоматически, используя стратегию декапитализации (lowercase first letter) имени класса.
Правила генерации имени:
- Для обычного класса: имя бина = имя класса с приведением первой буквы к нижнему регистру.
- Для классов, имя которых начинается с двух или более заглавных букв (например,
URLService), имя бина сохраняется как есть (т.е.,URLService), что является особым случаем.
Примеры:
@Service
public class PaymentService {} // Имя бина: "paymentService"
@Repository
public class UserRepositoryImpl {} // Имя бина: "userRepositoryImpl"
@Component
public class APIHandler {} // Имя бина: "APIHandler" (особый случай)
Важно: Если в контексте существует несколько бинов одного типа, необходимо задавать им уникальные имена явно, иначе возникнет конфликт.
Ответ 18+ 🔞
А, слушай, вот эта магия с именами бинов в Spring, она же иногда так подъебывает, что диву даёшься! Ну, типа, если ты не указал явно в аннотации @Component("myBean"), то Spring сам придумывает имя, как умеет. А стратегия у него простая, как три копейки — декапитализация, то есть первая буква имени класса становится маленькой.
Как он это делает, этот хитрый жополиз:
- Обычный класс: Берет имя класса, первую буковку делает строчной — всё, готово.
PaymentServiceпревращается в"paymentService". Логично же, да? - Особый случай, блядь! Если имя класса начинается с ДВУХ или БОЛЬШЕ заглавных букв (ну, типа
URLServiceилиAPIClient), то он оставляет его как есть, не трогает. Получается"URLService". Это чтобы всякие аббревиатуры не изнасиловать.
Смотри, как оно работает на практике:
@Service
public class PaymentService {} // Бин будет зваться: "paymentService"
@Repository
public class UserRepositoryImpl {} // А этот: "userRepositoryImpl"
@Component
public class APIHandler {} // А вот этот, сука, особый: "APIHandler" (две большие буквы вначале!)
Но вот тут, ёпта, важный момент, чтоб тебя не накрыло! Если у тебя в контексте вдруг завелось несколько бинов одного и того же типа (ну, два разных PaymentService), и ты им всем не дал уникальных имён — пиши пропало. Конфликт, исключение, всё в пизду. Spring начнёт орать, что не может выбрать, кого тебе впендюрить. Так что либо имена явно прописывай, либо не выёбывайся.