3.4.3 使用depends-on

    使用depends-on能够强制使一个或多个beans先初始化,之后再对这个bean进行初始化。

多个bean之间用“,”、“;”、“ ”隔开。

<bean id="beanOne" class="ExampleBean" depends-on="manager"/>

<bean id="manager" class="ManagerBean" />
<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" />

3.4.4 Lazy-initialized beans

    声明lazy-init="true"之后,仅仅有在第一次请求的时候才会对bean进行初始化,不会在容器初始化的时候初始化。

<bean id="lazy" class="com.foo.ExpensiveToCreateBean" lazy-init="true"/>

<bean name="not.lazy" class="com.foo.AnotherBean"/>

当然,假设一个“not lazy-initialized”bean依赖于一个“lazy-initialized”bean,那么ApplicationContext会在启动的时候创建“lazy-initialized”bean

<beans default-lazy-init="true">
<!-- no beans will be pre-instantiated... -->
</beans>

3.4.5 Autowiring collaborators(自己主动装配合作者)

    长处:

    1、明显降低指定properties货构造器属性;

    2、当对象更新时,能够自己主动更新配置而不须要手动改动配置

Table 3.2. Autowiring modes

no

不自己主动装配。bean的引用必须通过ref元素。

byName   

依据属性名称自己主动装配。某个bean定义为byName,而且它有一个叫master的属性,那么Spring查找定义为master属性的bean,然后将它注入进去

byType

假设某个bean的属性的类型存在的话,就用这个类型的对象注入,假设存在多个,那么抛出异常,假设没有匹配到的话,当做没有注入看待

constructor

与byType类似,只是是提供给构造器的參数

3.4.5.1 自己主动装配的约束与缺点

    缺点:

    1、properties和constructor-arg明白的依赖设置一般会覆盖自己主动装配。不能自己主动装配那些简单的properties,如primitives,String,Classes

    2、自己主动装配没有显示配置来的准确;

下面暂缺

3.4.6 方法注入

    这种方法放弃了IoC。通过实现ApplicationContextAware接口,然后通过setApplicationContext方法获取ApplicationContext,再通过getBean方法来获取。

// a class that uses a stateful Command-style class to perform some processing
package fiona.apple; // Spring-API imports
import org.springframework.beans.BeansException;
import org.springframework.context.Applicationcontext;
import org.springframework.context.ApplicationContextAware; public class CommandManager implements ApplicationContextAware { private ApplicationContext applicationContext; public Object process(Map commandState) {
// grab a new instance of the appropriate Command
Command command = createCommand();
// set the state on the (hopefully brand new) Command instance
command.setState(commandState);
return command.execute();
} protected Command createCommand() {
// notice the Spring API dependency!
return this.applicationContext.getBean("command", Command.class);
} public void setApplicationContext(ApplicationContext applicationContext)
throws BeansException {
this.applicationContext = applicationContext;
}
}
04-27 05:22