《Pro Spring》学习笔记(3)--Spring中的IOC

《Pro Spring》学习笔记(3)--Spring中的IOC

 

      控制反转包括两种类型:依赖查找(Dependency Lookup)和依赖注入(Dependency Injection),我们主要讨论的是依赖注入。
      依赖注入可以分为两种类型:构造子注入(Constructor Dependency Injection)和设值注入(Setter Dependency Injection)
      构造子注入,组件的依赖关系是通过构造函数来提供的,每个依赖关系对应构造函数的各个参数,IOC容器在实例化组件时,通过构造函数注入依赖关系。
public class ConstructorInjection {
    private Dependency dep;
    public ConstructorInjection(Dependency dep) {
        this.dep = dep;
    }
}
构造子注入适用于在使用某个组件之前,确保所有的依赖关系都已注入。
      设值注入,组件的依赖关系是通过JavaBean形式的setter方法注入的,IOC容器通过调用相应的set方法注入依赖关系。
public class SetterInjection {
    private Dependency dep;
    public void setMyDependency(Dependency dep) {
        this.dep = dep;
    }
}
设值注入适用于需要给某些依赖关系提供默认值的情况。
      Spring IOC容器的核心是BeanFactory,BeanFactory负责管理组件以及组件间的依赖关系。术语 bean在Spring中代表由容器管理的任何组件。Spring提供了两种常用的BeanFactory实现:DefaultListableBeanFactory和XmlBeanFactory。
      在BeanFactory中,每个bean都至少有一个名称,作为唯一标识,如果bean拥有多个名称的话,那么除第一个名称外的其它名称都将被认为是别名。
      DefaultListableBeanFactory可以使用PropertiesBeanDefinitionReader或者XmlBeanDefinitionReader(当然还可以是其它任何实现了BeanDefinitionReader接口的Bean定义读取器)来读取配置文件。
//使用PropertiesBeanDefinitionReader
private static BeanFactory getBeanFactory() throws Exception {
    // get the bean factory
    DefaultListableBeanFactory factory = new DefaultListableBeanFactory();
    // create a definition reader
    PropertiesBeanDefinitionReader rdr = new PropertiesBeanDefinitionReader(factory);
    // load the configuration options
    Properties props = new Properties();
    props.load( new FileInputStream("./ch2/src/conf/beans.properties"));
    rdr.registerBeanDefinitions(props);
    return factory;
}
//使用XmlBeanDefinitionReader
private static BeanFactory getBeanFactory() throws Exception {
    // get the bean factory
    DefaultListableBeanFactory factory = new DefaultListableBeanFactory();
    // create a definition reader
    XmlBeanDefinitionReader rdr = new XmlBeanDefinitionReader(factory);
    // load the configuration options
    rdr.loadBeanDefinitions( new FileSystemResource("ch4/src/conf/beans.xml"));
     return factory;
}
      XmlBeanFactory继承了DefaultListableBeanFactory,在使用XML配置文件时可以简化代码的编写,这也是我们最常用的BeanFactory。
private static BeanFactory getBeanFactory() throws Exception {
    XmlBeanFactory factory =
        new XmlBeanFactory( new FileSystemResource("ch4/src/conf/beans.xml"));
     return factory;
}
      获得了BeanFactory对象后,我们就可以使用bean的名称来获取我们需要的组件对象了。
Oracle oracle = (Oracle)factoyr.get("oracle");

你可能感兴趣的:(《Pro Spring》学习笔记(3)--Spring中的IOC)