### @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創建代理對象。