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