目录
1、使用 depends-on
如果一个 bean 是另一个 bean 的依赖项,这意味着,一个 bean 被设置为另一个 bean 的属性。通常,你可以在 xml 配置中使用 <ref/> 标签来完成这个配置。但是,有时候 beans 之间的依赖关系并不那么直接,比如,进行数据库驱动程序的注册时,就需要触发另一个类当中的静态初始化器。depends-on 属性可以让使用此配置的 bean ,在该 bean 初始化之前强制初始化一个或多个 bean 实例。下面的示例使用 depends-on 属性来表示对单个 bean 的依赖:// 强制定义 bean 之间的初始化顺序。
<bean id="beanOne" class="ExampleBean" depends-on="manager"/>
<bean id="manager" class="ManagerBean" />
如果要表达对多个 bean 的依赖,可以提供一个基于 bean 名称的列表作为 depends-on 属性的值(逗号、空格和分号都是有效的分隔符):
<bean id="beanOne" class="ExampleBean" depends-on="manager,accountDao">
<property name="manager" ref="manager" />
</bean>
<bean id="manager" class="ManagerBean" />
<bean id="accountDao" class="x.y.jdbc.JdbcAccountDao" />
depends-on 属性既可以指定初始化时的依赖项,也可以指定销毁时的依赖项(仅针对单例bean)。首先销毁该 bean 定义中指定的依赖项 bean,然后再销毁该 bean 本身。所以,depends-on 属性也可以控制销毁顺序。
2、懒加载 Lazy-initialized
默认情况下,ApplicationContext 容器在启动过程中会提前创建和配置所有的单例 bean。通常,这种模式下可以快速的发现 beans 配置文件中的错误。但是,当你不需要这种行为时,就可以通过将 bean 设置为懒加载模式来阻止 bean 的提前实例化。懒加载表示 Spring 容器不会在启动时就创建 bean 实例,而是在第一次请求时进行创建。
在 xml 配置中,这种行为由 <bean/> 标签上的 lazy-init 属性控制,如下例所示:
<bean id="lazy" class="com.something.ExpensiveToCreateBean" lazy-init="true"/>
<bean name="not.lazy" class="com.something.AnotherBean"/>
当上边配置被 ApplicationContext 使用时,lazy bean 在 ApplicationContext 启动时不会被实例化,但是, not.lazy bean 将会在容器启动时被创建。
然而,当一个懒加载的 bean 是一个非懒加载 bean 的依赖项时,ApplicationContext 还是会在启动时创建这个懒加载的 bean,因为它必须满足非懒加载 bean 依赖项的完整性。懒加载的 bean 被注入到其他非懒加载的 bean 中时,lazy-init 属性将被忽略。
你还可以在 <beans/> 元素上使用 default-lazy-init 属性来控制容器级别的懒加载,如下例所示:// 批量设置 beans 的懒加载
<beans default-lazy-init="true">
<!-- 没有 beans 会被提前加载... -->
</beans>
至此,bean 的两个配置属性介绍完毕。