Давайте рассмотрим самый простой пример: у вас есть приложение, и вы просто используете загрузчик классов по умолчанию. У вас есть класс, который, по какой-либо причине, вы решаете, что он не должен иметь более одного экземпляра в приложении. (Вспомните сценарий, в котором над приложениями работают несколько человек).
Если вы не используете среду Spring, шаблон Singleton гарантирует, что в вашем приложении будет не более одного экземпляра класса. Это потому, что вы не можете создать экземпляры класса, выполнив команду «new», потому что конструктор является закрытым. Единственный способ получить экземпляр класса - вызвать некоторый статический метод класса (обычно называемый «getInstance»), который всегда возвращает один и тот же экземпляр.
Утверждение, что вы используете в своем приложении среду Spring, просто означает, что в дополнение к обычным способам получения экземпляра класса (новые или статические методы, которые возвращают экземпляр класса), вы также можете задать Spring чтобы получить экземпляр этого класса, Spring гарантирует, что всякий раз, когда вы запрашиваете экземпляр этого класса, он всегда будет возвращать один и тот же экземпляр, даже если вы не написали класс с использованием шаблона Singleton. Другими словами, даже если у класса есть открытый конструктор, если вы всегда запрашиваете у Spring экземпляр этого класса, Spring будет вызывать этот конструктор только один раз в течение жизни вашего приложения.
Обычно, если вы используете Spring, вы должны использовать Spring только для создания экземпляров, и вы можете иметь открытый конструктор для класса. Но если ваш конструктор не является частным, вы не мешаете никому создавать новые экземпляры класса напрямую, минуя Spring.
Если вы действительно хотите один экземпляр класса, даже если вы используете Spring в своем приложении и определяете класс в Spring как singleton, единственный способ убедиться, что он также реализует класс с использованием шаблона Singleton. Это гарантирует, что будет один экземпляр, независимо от того, используют ли пользователи Spring для получения экземпляра или обходят Spring.