javax.inject.Provider源码分析
parent
03c4d2b51a
commit
731acb488b
|
@ -123,9 +123,10 @@ public class MyService {
|
||||||
|
|
||||||
运行结果发现,`myServiceProvider1` 和 `myServiceProvider2` 两次获取到的 `MyService` 实例具有相同的对象引用(`@235ecd9f`)。这说明 `MyService` bean 是单例作用域的。
|
运行结果发现,`myServiceProvider1` 和 `myServiceProvider2` 两次获取到的 `MyService` 实例具有相同的对象引用(`@235ecd9f`)。这说明 `MyService` bean 是单例作用域的。
|
||||||
|
|
||||||
| :warning: 注意! |
|
<div style="border: 1px solid #e5e5e5; padding: 20px; background-color: #f8f8f8; border-radius: 5px; box-shadow: 2px 2px 12px #aaa;">
|
||||||
| :----------------------------------------------------------- |
|
<span style="font-size: 20px; color: #333;">💡 提示:</span>
|
||||||
| 在 Spring 中,默认的作用域是单例(singleton),这意味着在整个 Spring 容器中,一个特定的 bean 定义只有一个实例。因此,无论我们调用多少次 `myServiceProvider.get()`,它都会返回相同的 `MyService` 实例。如果我们想每次都获得一个新的 `MyService` 实例,我们需要将 `MyService` 定义为原型作用域(prototype)。 |
|
<p style="font-size: 16px; color: #555;">在 Spring 中,默认的作用域是单例(singleton),这意味着在整个 Spring 容器中,一个特定的 bean 定义只有一个实例。因此,无论我们调用多少次 `myServiceProvider.get()`,它都会返回相同的 `MyService` 实例。如果我们想每次都获得一个新的 `MyService` 实例,我们需要将 `MyService` 定义为原型作用域(prototype)。</p>
|
||||||
|
</div>
|
||||||
|
|
||||||
```java
|
```java
|
||||||
myServiceProvider1 = com.xcs.spring.service.MyService@235ecd9f
|
myServiceProvider1 = com.xcs.spring.service.MyService@235ecd9f
|
||||||
|
@ -511,4 +512,7 @@ protected Object getValue() throws BeansException {
|
||||||
- 对于JSR-330的`Provider`类型的依赖,Spring会创建一个特定的`Provider`实例来满足这个依赖,这是通过`Jsr330Factory`和其内部类`Jsr330Provider`实现的。
|
- 对于JSR-330的`Provider`类型的依赖,Spring会创建一个特定的`Provider`实例来满足这个依赖,这是通过`Jsr330Factory`和其内部类`Jsr330Provider`实现的。
|
||||||
5. **获取`Provider`的值**
|
5. **获取`Provider`的值**
|
||||||
- 在`Jsr330Provider`中的`get`方法被调用时,会进一步调用`getValue`方法。
|
- 在`Jsr330Provider`中的`get`方法被调用时,会进一步调用`getValue`方法。
|
||||||
- `getValue`方法负责实际的依赖解析,返回所需的bean实例。
|
- `getValue`方法负责实际的依赖解析,返回所需的bean实例。
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue