Spring IOC&DI学习笔记

  1. IOC&DI概述:
    1. IOC【反转控制】:反转资源获取的方向,ICO容器主动将资源推送给它所管理的组件,组件选择用合适的方式接受资源
    2. DI【依赖注入】:组件以一种预先定义好的方式(如set方法),接受来自容器的资源注入,是IOC的另一种表述
  2. Spring平台核心jar包:
    1. spring-beans-4.0.0.M2.jar    配置bean的支持
    2. spring-context-4.0.0.M2.jar    上下文
    3. spring-core-4.0.0.M2.jar    核心容器
    4. spring-expression-4.0.0.M2.jar
    5. commons-logging-1.1.1.jar        平台依赖的日志包
  1. IOC容器基本结构:
    1. ApplicationContext :IOC容器接口
    2. ConfigurableApplicationContext :新增了两个主要方法:Refresh():刷新上下文Close():关闭上下文
    3. ClassPathXmlApplicationContex:从类路径下加载配置文件
    4. FileSystemXmlApplicationContext:从文件系统中加载配置文件
  1. 通过XML文件配置Bean
    1. Bean元素基本属性配置:
      1. Id:Bean在容器中的唯一标识
      2. class:Bean的全类名
      3. p:用于配置类的属性值,简化property标签,【p:username=”admin”】相当于<property name=”username” value=”admin”/>,如果需要注入的属性是引用类型则通过 p:username-ref指定,相当于property元素中的ref属性
      4. abstract:指定该Bean为模板,其他Bean可以继承该模板除abstract和id外的所有属性配置
      5. parent:指定该Bean的父Bean,即继承哪个模板Bean
      6. depends-on:指定该Bean依赖另一个Bean的实例,IOC容器在实例化该Bean时会向该属性指向的另一个Bean发送实例化请求去实例化指向的Bean
      7. autowire:根据指定模式自动装配对象中的对象属性,可配置4种模式:
  • no:不使用自动装配
  • byName:根据属性名查找容器中对应相同id的Bean,并自动装配
  • byType:根据属性类型,自动装配容器中的相同类型Bean,如果存在多个相同类型的Bean,则抛出异常。如果没有找到对应的Bean则不进行装配
  • constructor根据构造器参数类型进行装配,如果在容器中没有找到与构造器参数类型匹配的Bean,则抛出异常
  1. autowire-candidate:设置为false表示使自动装配失效
  2. scope:指定Bean的作用域
  • singletion(默认)单例,该Bean在容器中是单实例的,在容器被创建时该Bean就被实例化
  • prototype:多实例,每次从容器中获取该Bean都会被实例化,并返回一个新的实例
  1. init-method:指定Bean生命周期中的初始化方法,会在调用Bean的构造器过后执行该方法
  2. destroy-method:制定Bean生命周期中的销毁方法,会在销毁该Bean时执行
  3. lazy-init:延迟加载,默认为false。当Bean被scope属性指定为单例时(默认为单例),可以配置该属性是否延迟加载,如果设为true,则表示该Bean在第一次被调用时才创建实例,不管是在容器内部被其他Bean调用还是在外部从容器中获取时调用
  4. factory-method:静态工厂方法创建Bean。指定创建Bean实例的静态方法,容器从class属性配置的类中找到该工厂,并使用该静态方法加载Bean,如果该工厂方法需要传入参数,则使用<constructor-arg>子元素
  5. fatory-bean:实例工厂方法创建Bean。 如果需要配置的工厂方法不是静态的,则需要先配置工厂对象的Bean,使其在容器中存在实例,再用该属性指定工厂该Bean
  1. Bean的子元素:
    1. <property>:设置对象的属性
    2. <constructor-arg>:设置对象的构造器参数
    3. <list>:List集合注入
    4. <set>:Set集合注入
    5. <map>:Map集合注入
    6. <props>:properties对象注入
  2. 其他元素:
    1. <context:property-placeholder>:将配置文件导入到IOC容器上下文,在容器XML配置文件其他位置可以用${key}的方式直接获取配置文件对应key的值
    2. <context:component-scan>:扫描指定包下的文件的Spring注解。通过base-package属性指定需要扫描的包和该包的所有子包,可通过<context:exclude-filter>和<context:include-filter>子元素指定需要排除和包含的类
  1. 通过FactoryBean配置Bean

    FactoryBean是实现了FactoryBean<T>接口的Bean,根据Bean的id获取到的实际上是该接口的getObject()返回的对象,而不是FactoryBean本身,也可通过在id前面加一个&符号来获取FactoryBean本身。用户可以通过实现org.springframework.beans.factory.FactoryBean接口来自定义FactoryBean

    public Object getObject() throws Exception:返回的Bean

    public Class<?> getObjectType():返回Bean的类型

    public boolean isSingleton():是否为单例

  2. 通过注解配置Bean

Spring能够通过配置<context:component-scan>元素自动扫描、侦测和实例化具有特定注解的组件

  1. @Component:基本注解,标识了一个受Spring管理的组件
  2. @Respositroy:标识持久层注解
  3. @Service:标识业务层组件
  4. @Controller:标识表现层组件
  5. @Autowired:自动装配。会byName->byType的顺序查找容器中对应的Bean,如果没有则抛出异常,可通过设置required参数的值为false来指定该属性不是必须要装配的,就不会再没有找到时抛出异常

相关文章

0 Comments
Leave a Reply