Spring 标准 Bean 注入(inject)与 Autowiring

标签 spring spring-mvc

据我了解,当使用依赖注入(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/

相关文章:

spring - 第三方Spring库中的缓存管理器

java - Spring 安全 405

java - spring mvc 表单输入

java - 为什么在 Spring 中有 2 种处理静态资源的方式(addResourceHandlers 和容器的 Default Servlet")?

java - 使用 Spring MVC 提供 sitemap.xml 和 robots.txt

java - 如何将 spring bean 注入(inject) jsp 2.0 SimpleTag?

java - 将对象数据从 JSP 传递到 Spring Controller Post 方法而不是 GET 方法

spring - spring mvc3 中的请求映射 url 模式

java - Spring Data Mongo + 延迟加载 + REST Jackson

Spring 安全 OAuth2 : Purge TokenStore