Spring IOC容器---入门 一

一  IoC概念

IoC(Inverse of Control) 翻译为控制反转。所谓IoC,就是通过容器来控制业务对象之间的依赖关系,而非 传统的由代码直接控制。控制权由应用代码中转到了外部容器,控制权的转移,就是反转。控制权的转移带来的好处就是降低了业务对象之间的依赖程度。

二 BeanFactory

BeanFactory是Spring框架最核心的接口,一般称之为IoC容器

BeanFactory负责读取Bean配置文件,管理Bean 的加载并实例化,维护bean之间的依赖关系,负责bean的生命周期等功能

BeanFactory主要方法包括:

   通过Bean的id获得一个业务对象实例


   通过Bean的id和业务对象的类型获得一个实例


   通过Bean的id和构造函数的入参获得一个业务对象实例,并且Bean必须设置scope="prototype",业务对象中也必须拥有与args数组中相同类型,相同个数的参数的构造函数


   是否包含id为name的Bean


   id为name的Bean是否每次返回同一个Bean实例,即是否设置scope="singleton"


   id为name的Bean是否每次返回不同的Bean实例,即是非设置scope="prototype"


  id为name的Bean返回实例的类型是否与targetType匹配


  id为name的Bean返回实例的类型


  id为name的Bean的所有别名


通过XmlBeanFactory实现类启动Spring IoC容器 ,如下代码所示:

   

     XmlBeanFactory通过Resource装载Spring配置信息并启动IoC容器,然后通过getBean()从IoC容器中获取Bean了

三 ListableBeanFactory

主要是获取Bean的定义与配置信息相关的支撑接口,继承于BeanFactory

ListableBeanFactory的主要方法包括:

    是否有符合给定beanName的Bean

  boolean containsBeanDefinition(String beanName);
    定义Bean的总数

  int getBeanDefinitionCount();
    所有Bean的name
  String[] getBeanDefinitionNames();
    所有符合对象类型的Bean的name

  String[] getBeanNamesForType(Class type);
    所有符合对象类型的Bean的name,可以指定是否单例,是否渴望初始化

  String[] getBeanNamesForType(Class type, boolean includeNonSingletons, boolean allowEagerInit);
    所有符合对象类型的Bean的实例
  Map getBeansOfType(Class type) throws BeansException;
    所有符合对象类型的Bean的实例,可以指定是否单例,是否渴望初始化

  Map getBeansOfType(Class type, boolean includeNonSingletons, boolean allowEagerInit)
	    throws BeansException;

四 HierarchicalBeanFactory

顾名思义,该接口是定义BeanFactory分层的支撑,Hierarchical是分层的意思。继承于BeanFactory接口

HierarchicalBeanFactory的主要方法包括:

    返回当前BeanFactory的parentBeanFactory

  BeanFactory getParentBeanFactory();  
    在当前BeanFactory查找是否包含指定的bean,并不在parentBeanFactory中查找

  boolean containsLocalBean(String name);

五 AutowireCapableBeanFactory

主要是Spring自动装配相关功能的支撑接口,继承于BeanFactory

AutowireCapableBeanFactory首先定义了5个自动装配的类型:AUTOWIRE_NO=0,AUTOWIRE_BY_NAME=1,

AUTOWIRE_BY_TYPE=2,AUTOWIRE_CONSTRUCTOR=3,AUTOWIRE_AUTODETECT=4,分别对应不自动装配、按名字、按类型、按构造器、按照自省完全自动装配(spring 3.0不支持了)

AutowireCapableBeanFactory的主要方法包括:

    用给定的类型创建一个bean实例

  Object createBean(Class beanClass) throws BeansException;

    用给定的类型、给定的自动装配类型、是否检查依赖创建一个bean实例

  Object createBean(Class beanClass, int autowireMode, boolean dependencyCheck) throws BeansException;
    个人理解是@AutoWired有关
  void autowireBean(Object existingBean) throws BeansException;
    配置原始Bean,就是把 existingBean自动装配到beanName对应的bean中
  Object configureBean(Object existingBean, String beanName) throws BeansException;
    解决beans之间的特定依赖,descriptor是依赖描述,beanName是描述当前依赖的bean的名字
  Object resolveDependency(DependencyDescriptor descriptor, String beanName) throws BeansException;
    实例化一个bean实例,通过bean的类型,自动装配类型以及是否检查依赖
  Object autowire(Class beanClass, int autowireMode, boolean dependencyCheck) throws BeansException;
    对一个已存在的bean按照自动装配类型,是否检查依赖进行装配
  void autowireBeanProperties(Object existingBean, int autowireMode, boolean dependencyCheck)throws BeansException;
   beanName明确定义的属性的值会被自动装配到existingBean中
  void applyBeanPropertyValues(Object existingBean, String beanName) throws BeansException;
    初始化bean,并调用工厂回调,并调用所有BeanPostProcessor的两个回调

  Object initializeBean(Object existingBean, String beanName) throws BeansException;
    在初始化前调用 BeanPostProcessor的两个回调
  Object applyBeanPostProcessorsBeforeInitialization(Object existingBean, String beanName)
			throws BeansException;
    在初始化后调用 BeanPostProcessor的两个回调
  Object applyBeanPostProcessorsAfterInitialization(Object existingBean, String beanName)
			throws BeansException;
   
  Object resolveDependency(DependencyDescriptor descriptor, String beanName,
		Set autowiredBeanNames, TypeConverter typeConverter) throws BeansException;

















  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值