Stpring Scope

Posted by Adam on August 24, 2022
### @Scope 使用方法 在Spring Boot中,@Scope註釋可用於指定bean的作用域。以下是一些常見的@Scope使用方法: 1. Singleton:默認的作用域,表示每個Spring容器中只有一個bean實例。可以通過在類上使用@Scope("singleton")註釋來設置。 ```java @Component @Scope("singleton") public class MySingletonBean { // Bean內容 } ``` 2. Prototype:每次請求時創建一個新的bean實例。可以通過在類上使用@Scope("prototype")註釋來設置。 ```java @Component @Scope("prototype") public class MyPrototypeBean { // Bean內容 } ``` 3. Request:在每個HTTP請求中創建一個新的bean實例。需要使用@Scope("request")註釋。 ```java @Component @Scope("request") public class MyRequestBean { // Bean內容 } ``` 4. Session:在每個HTTP會話中創建一個新的bean實例。需要使用@Scope("session")註釋。 ```java @Component @Scope("session") public class MySessionBean { // Bean內容 } ``` 5. Custom:自定義作用域。可以通過實現自定義的Scope介面並在類上使用@Scope("custom")註釋來實現。 以上是一些常見的@Scope使用方法,您可以根據自己的需求選擇適合的作用域。 ### proxyMode Scope的proxyMode的作用是指定代理模式,主要有两種選項可以選擇: 1. PROXY:這種模式下,Spring容器將使用JDK動態代理來創建代理對象。這種模式適用於基於接口的代理。 2. TARGET_CLASS:這種模式下,Spring容器將使用CGLIB庫來創建代理對象。這種模式適用於基於類的代理。 你可以通過在bean的配置中設置proxyMode屬性來指定代理模式,例如: ```java @Bean @Scope(value = "prototype", proxyMode = ScopedProxyMode.TARGET_CLASS) public MyBean myBean() { return new MyBean(); } ``` 在上面的範例中,我們指定了myBean()方法返回的bean在"prototype"作用域下,並使用TARGET_CLASS代理模式。這樣Spring容器將使用CGLIB庫來為該bean創建代理對象。