Spring -Ioc学习(1)

来源:互联网 发布:手机知乎怎么复制 编辑:程序博客网 时间:2024/06/06 11:49
  • 1.在spring 中spring ioc提供了一个基本的javaBean容器,通过Ioc模式管理 依赖关系,并通过依赖注入和aop切面增强了为javaBean这样的POJO对象赋予事务管理、生命周期管理等基本功能。
  • 2.ioc的注入实现中有1.接口注入;2.setter注入;3.构造器注入。
  • 3.Ioc容器中有两个主要的容器系列,一个是实现BeanFactory接口的简单容器系列,这个系列容器只实现了容器的最基本的功能;二是ApplicationContex应用上下文,是高级形态。
  • 3.1 IOC容器的主要接口
    这里写图片描述
    1.beanFactory到hierarchicalBeanFactory,到configurableBeanFactory,beanFactory接口定义了基本的Ioc容器规范,包含getBean()基本方法,hierarchicalBeanFactory增加了getParentBeanFactory()的接口功能,使beanFactory局部双亲Ioc容器的管理功能。configurableBeanFactory定义了对beanFactory的一些配置。
    2.applicationContext应用上下文接口为核心的接口,细化了许多beanFactory接口的定义。
  • 3.2 beanFactory应用场景
    BeanFactory: 以Factory结尾,表示它是一个工厂类,是用于管理Bean的一个工厂

FactoryBean:以Bean结尾,表示它是一个Bean,不同于普通Bean的是:它是实现了FactoryBean接口的Bean,根据该Bean的Id从BeanFactory中获取的实际上是FactoryBean的getObject()返回的对象,而不是FactoryBean本身, 如果要获取FactoryBean对象,可以在id前面加一个&符号来获取。

(1).Object getBean(Stringname) throws BeansException;getBean是IoC容器中最重要的方法,通过该方法可以取得IoC容器中管理的Bean,Bean的取得是通过指定名字来进行所引的。(2). <T> T getBean(String name, Class<T> requiredType) throws BeansException;根据指定的名字和类型取得IoC容器中管理的Bean,和getBean(String name)方法类似,只是多提供了一个类型安全验证机制。(3). <T> T getBean(Class<T> requiredType) throws BeansException;根据指定的类型取得IoC容器中管理的Bean,该方法根据指定的类型调用ListableBeanFactory(BeanFactory下的)中的取得Bean方法,但是也可能根据给定的类型调用通过名字取得Bean的方法。(4). Object getBean(String name, Object... args) throws BeansException;该方法重载了getBean(String name)方法,可变参数主要用来指定是否显示使用静态工厂方法创建一个原型(prototype)Bean。(5). boolean containsBean(String name);该方法让用户判断IoC容器中是否含有指定名字的Bean。(6). boolean isSingleton(String name) throws NoSuchBeanDefinitionException;该方法用来查询指定名字的Bean是否是单态类型(singleton)的Bean。(7). boolean isPrototype(String name) throws NoSuchBeanDefinitionException;该方法用来查询指定名字的Bean是否是原型(prototype)类型的Bean。(8). boolean isTypeMatch(String name, Class targetType)throws NoSuchBeanDefinitionException;该方法用来查询指定名字的Bean的class类型是否支持特定的class类型。(9). Class<?> getType(String name) throws NoSuchBeanDefinitionException;该方法用来查询指定名字的Bean的class类型。(10). String[] getAliases(String name);该方法用来查询指定名字的Bean的所有别名。
  • 3.3 编程式创建Ioc容器
    1.创建Ioc配置文件的抽象资源,抽象资源包含beanDefinition的定义信息。
    2.创建beanFactory.
    3.创建一个载入beanDefinition的读取器,返回一个回调配置给beanFactory。
    4.从定义好的资源位置读入配置信息,完成解析过程。
  • 3.4 ApplcationContext的应用场景
    好处:1.支持不同的信息源;2.访问资源;3.支持应用事件。4.在applicationContext中提供附加服务。
  • 4.Ioc容器的初始化过程
    1..启动包含beanDefinition的resource定位;2.载入;3.注册
  • 4.1 resource的定位,指的是beanDefinition的资源定位,它是由resourceLoader通过统一的resource接口来完成。

  • 4.2 beanDefinition的载入,用户定义好的bean表示成ioc容器内部的数据结构。
    载入过程相当于把定义的beanDefinition在Ioc容器中转换成一个spring内部表示的数据结构的过程。如果在创建容器前,已经有容器存在,需要把已有的容器销毁和关闭。

  • 4.3 向ioc容器注册这些beanDefinition的过程。