Spring标准Bean注入与自动装配

dan*_*nik 15 spring spring-mvc

据我所知,当使用依赖注入时,所有bean都在Start上初始化.

<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>
Run Code Online (Sandbox Code Playgroud)

并且上面的配置意味着在应用程序启动时创建的userService和userPreferences.这是对的吗?

使用自动装配和使用时 <context:component-scan>

public class SimpleUserService{

@Autowired
UserPreferences userPreferences;

//omitted
} 
Run Code Online (Sandbox Code Playgroud)

1)是否在Application init上创建了userPreference?

2)autowire注入的bean的默认范围是什么?我们如何更改它?

3)如何影响豆类创造和豆类注射?

希望我清楚自己.

Ral*_*lph 12

首先,你应该添加@Service@ComponentSimpleUserService类.

  • 1是的,UserPreferences的ONE实例是在应用程序初始化时创建的
  • 2默认范围是单例,您可以使用@Scope注释更改它(@参见Spring参考:3.11.4.4指定bean范围)
  • 3组件扫描和XML配置以相同的方式工作(生命周期)

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

  • 首先它创建了一个bean池
  • 然后它将属性注入到bean中

但它不能以这种方式工作:获取一个类,查看它需要创建此引用(递归)然后创建类的引用.

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