Ответ
Да, по умолчанию создаётся один экземпляр (singleton). Все поля, аннотированные @Autowired и ссылающиеся на бин с @Component, получат ссылку на один и тот же объект в контексте Spring.
Пример:
@Component // Spring создаст ОДИН экземпляр этого класса
public class CommonService {
// ...
}
@Service
public class OrderService {
@Autowired // Ссылка на единственный экземпляр CommonService
private CommonService commonService;
}
@Controller
public class UserController {
@Autowired // Ссылка на тот же самый экземпляр CommonService
private CommonService commonService;
}
Области видимости (Scope) бинов:
Поведение по умолчанию можно изменить с помощью аннотации @Scope:
@Scope("singleton")(по умолчанию): Один бин на IoC-контейнер.@Scope("prototype"): Новый экземпляр при каждом запросе (черезgetBean()или инъекцию).@Scope("request"),@Scope("session"): Бин привязан к жизненному циклу HTTP-запроса или сессии (в веб-приложениях).
Почему singleton по умолчанию? Это обеспечивает эффективное использование памяти, отсутствие накладных расходов на создание объектов и безопасность в многопоточном окружении, если бин является stateless.