ลองดูตัวอย่างที่ง่ายที่สุด: คุณมีแอปพลิเคชันและคุณใช้ classloader เริ่มต้น คุณมีคลาสที่ไม่ว่าด้วยเหตุผลใดคุณตัดสินใจว่าไม่ควรมีมากกว่าหนึ่งอินสแตนซ์ในแอปพลิเคชัน (ลองนึกถึงสถานการณ์ที่มีคนหลายคนทำงานกับชิ้นส่วนของแอปพลิเคชัน)
หากคุณไม่ได้ใช้ Spring framework รูปแบบ Singleton ช่วยให้มั่นใจได้ว่าจะไม่มีอินสแตนซ์ของคลาสมากกว่าหนึ่งอินสแตนซ์ในแอปพลิเคชันของคุณ นั่นเป็นเพราะคุณไม่สามารถสร้างอินสแตนซ์อินสแตนซ์ของคลาสด้วยการทำ 'ใหม่' ได้เนื่องจากตัวสร้างเป็นแบบส่วนตัว วิธีเดียวที่จะได้อินสแตนซ์ของคลาสคือการเรียกเมธอดแบบคงที่ของคลาส (โดยปกติเรียกว่า 'getInstance') ซึ่งจะส่งคืนอินสแตนซ์เดียวกันเสมอ
การบอกว่าคุณกำลังใช้ Spring framework ในแอปพลิเคชันของคุณนั่นหมายความว่านอกเหนือจากวิธีการรับอินสแตนซ์ของคลาสปกติแล้ว (วิธีการใหม่หรือแบบคงที่ที่ส่งคืนอินสแตนซ์ของคลาส) คุณยังสามารถขอให้ Spring ช่วยคุณได้ อินสแตนซ์ของคลาสนั้นและ Spring จะช่วยให้มั่นใจได้ว่าเมื่อใดก็ตามที่คุณถามอินสแตนซ์ของคลาสนั้นมันจะส่งคืนอินสแตนซ์เดียวกันเสมอแม้ว่าคุณจะไม่ได้เขียนคลาสโดยใช้รูปแบบซิงเกิลตันก็ตาม กล่าวอีกนัยหนึ่งแม้ว่าชั้นเรียนจะมีตัวสร้างสาธารณะ แต่ถ้าคุณขอให้ Spring เป็นตัวอย่างของคลาสนั้นเสมอ Spring จะเรียกตัวสร้างนั้นเพียงครั้งเดียวในช่วงชีวิตของแอปพลิเคชันของคุณ
โดยปกติถ้าคุณใช้ Spring คุณควรใช้ Spring เพื่อสร้างอินสแตนซ์เท่านั้นและคุณสามารถมีตัวสร้างสาธารณะสำหรับคลาสได้ แต่ถ้าตัวสร้างของคุณไม่เป็นส่วนตัวคุณก็ไม่ได้ป้องกันไม่ให้ใครสร้างอินสแตนซ์ใหม่ของคลาสโดยตรงโดยข้าม Spring
หากคุณต้องการอินสแตนซ์เดียวของคลาสแม้ว่าคุณจะใช้ Spring ในแอปพลิเคชันของคุณและกำหนดคลาสใน Spring เป็นซิงเกิลตันวิธีเดียวที่จะทำให้แน่ใจได้ว่าจะใช้คลาสโดยใช้รูปแบบ Singleton ด้วย นั่นทำให้มั่นใจได้ว่าจะมีอินสแตนซ์เดียวไม่ว่าผู้คนจะใช้ Spring เพื่อรับอินสแตนซ์หรือบายพาส Spring