Spring3.0官网文档学习笔记(八)--3.4.3~3.4.6

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

Mode Explanation
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;
 }
}


posted @ 2014-06-29 16:33  hrhguanli  阅读(199)  评论(0编辑  收藏  举报