gpt4 book ai didi

Spring 标准 Bean 注入(inject)与 Autowiring

转载 作者:IT老高 更新时间:2023-10-28 13:53:50 26 4
gpt4 key购买 nike

据我了解,当使用依赖注入(inject)时,所有 bean 都在开始时进行初始化。

<bean id="userPreferences" class="com.foo.UserPreferences">
</bean>
<!-- a singleton-scoped bean injected to the above bean -->
<bean id="userService" class="com.foo.SimpleUserService">

<!-- a reference to the userPreferences bean -->
<property name="userPreferences" ref="userPreferences"/>
</bean>

上面的配置意味着在应用程序启动时创建了 userService 和 userPreferences。对吗?

使用 Autowiring 和使用 <context:component-scan>

public class SimpleUserService{

@Autowired
UserPreferences userPreferences;

//omitted
}

1) userPreference 是在 Application init 上创建的吗?

2) autowire 注入(inject)的 bean 的默认作用域是什么,我们如何改变它?

3) 如何影响 bean 创建和 bean 注入(inject)?

希望我说清楚了。

最佳答案

首先你应该将 @Service@Component 添加到 SimpleUserService 类中。

  • 1 是的,UserPreferences 的 ONE 实例是在应用程序初始化时创建的
  • 2 默认作用域是单例,你可以通过@Scope 注解改变它(@See Spring Reference: 3.11.4.4 Specifying bean scope)
  • 3 组件扫描和 XML 配置的工作方式相同(生命周期)

也许您应该花一些时间来了解 Spring 生命周期。您需要了解 Spring 以这种方式工作(不是 100% 正确):

  • 首先它会创建一个 bean 池
  • 然后它将属性注入(inject)到 bean 中

但它不是这样工作的:获取一个类,看看它需要什么引用创建这个引用(递归),然后创建类。

如果你理解了这一点,那么你也会明白,bean 的 @Scope 是在 bean 声明/类中定义的,而不是在引用中。

关于Spring 标准 Bean 注入(inject)与 Autowiring ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5890605/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com