Spring中的單例模式是通過Bean實例的緩存來實現(xiàn)的。當Spring容器創(chuàng)建一個Bean時,它首先檢查是否已經(jīng)存在一個該類型的Bean的實例,如果已經(jīng)存在就返回現(xiàn)有的實例,否則就創(chuàng)建一個新的實例并緩存起來,下次請求時再返回緩存中的實例。
具體實現(xiàn)方式如下:
<bean id="exampleBean" class="com.example.ExampleBean" scope="singleton">
</bean>
默認情況下,Spring容器創(chuàng)建的Bean都是單例的,即在整個應用程序中只有一個實例被創(chuàng)建和維護。
可以在Bean的配置文件中通過設置scope屬性為"singleton",來顯式地聲明該Bean為單例的,如下所示:
Spring還可以支持自定義的作用域,例如“prototype”等,通過實現(xiàn)Scope接口來完成。一個Scope的實現(xiàn)只需要 override Scope#get() 方法返回一個對象,這個對象需要是線程安全的,以及實現(xiàn)一些生命周期方法,如registerDestructionCallback來釋放資源等。
總結起來,Spring通過緩存已經(jīng)創(chuàng)建的Bean的實例來實現(xiàn)單例模式,既提高了應用程序的執(zhí)行效率,又能夠保證Bean的唯一性。