BeanFacory
  所有bean factory的父接口,提供了创建bean和管理bean的生命周期的方法

HierarchicalBeanFactory
  实现了factory的继承体系,可以通过factory的父factory查找bean

ListableBeanFactory
  提供了对factory中的bean的遍历访问方法,但不会从factory的继承关系中查找。

AutowireCapableBeanFactory
  提供对一个已经存在的对象进行dependency injection的功能;或者利用反射机制,根据一个类的全名

对它进行injection并返回它

ConfigurableBeanFactory
  可以在初始化阶段对factory进行一些额外的配置

Application Context
  功能更强大的factory bean。主要特性:General framework-oriented usage style,MessageSource

support,Support for application and framework events,ResourceLoader support。

定义Bean
Identifier
  可以用id或name属性来定义bean。id的类型为XML IDREF,可以在xml解析时校验ref的有效性,但其中

只能由数字/字符或者'_',不能包含空格。name属性则没有这个限制,而且可以用','同时定义多个标识

符。如果定义了多个标识符,他们被认为是同义的。

创建bean的三种方式
  class;class+static factory method;factory bean+factory method

Singleton versus prototype bean
  默认情况下容器创建的bean为singleton,这就要求bean被设计成无状态、线程安全的,容器会保持对

这种bean的引用;prototype bean可以有多个实例,容器不会保持对它们的引用

指定bean的依赖性
  可以同时使用constructor injection和setter injection进行dependency injection
  bean初始化的校验过程中可能会抛出异常
  默认情况下,容器会对singleton bean进行pre-instantiation,以提前发现创建bean时可能出现的错

误,可以通过设置lazy-init属性来改变这种处理方式
  容器内置了一些类型转换器用于将String类型的值转换为需要的类型,也可以注册自定义的类型转换器
  可以设置Collection类型的属性,如List,Set,Map,Properties等,而且可以任意嵌套
  可以基于名称或者类型匹配进行隐式注入(autowiring)

property标签中可用的子标签
  (bean | ref | idref | list | set | map | props | value | null)

ref标签
  分三类:local,bean,parent。local只能引用当前xml中定义的bean;bean可以引用当前和外部xml中定

义的bean;parent只能引用父factory中定义的bean

value标签
  指定属性的值。如果要将属性设置为null,必须使用</null>标签。否则被认为是""

list,set,map,props标签
  使用它们时,对应的Java类的属性的类型必须为List,Set或Map,而不能是specific type如ArrayList.

如果一定要使用可以选择ListFactoryBean,SetFactoryBean,MapfactoryBean等factory bean

bean标签
  用来定义inner bean。这个bean只被包含它的bean使用,且一定是prototype的。

改变bean的初始化顺序
  使用depends-on属性定义需要先初始化的bean

Autowiring Dependencies
  基于反射实现,通过autowire属性设置,共有五个级别。很容易造成混乱,需慎用
  no:默认值,不使用autowiring
  byName:通过Java类中属性的名称在factory中查找同名的bean,可以通过设置dependencycheck来改变

查找不匹配时的处理方式。
  byType:通过Java类中属性的类型在factory中查找同类型的bean,若匹配的数量超过一个则报错,可以

通过设置dependencycheck来改变查找不匹配时的处理方式。
  constructor:对Java类中定义的每个constructor,通过参数类型在factory中查找bean,使用最匹配的

那个constructor
  autodetect:如果Java类有无参constructor,使用byType,否则使用constructor

bean的依赖性校验
  可以通过设置dependency-check属性来改变校验级别,共四个:
  none:默认的级别,不进行校验
  simple:校验primitive type和collections类型的属性
  object:校验除primitive type和collections以外的类型的属性
  all:校验所有类型的属性

管理bean的生命周期
  container-driven的bean的生命周期如下:
  Bean is instantiated-bean通过构造器或者工厂方法被实例化
  Dependencies injected-依赖注入
  setBeanName(),setBeanFactory(),setResourceLoader(),setApplicationEventPublisher

(),setMessageSource(),setApplicationContext()等方法被调用-如果bean实现了对应的接口,则这些方

法被调用(BeanNameAware,BeanFactoryAware,...)
  Bean post-processors get "before-initialization" callback-在容器中注册过的post-processor的

方法被调用
  afterPropertiesSet() called-如果bean实现了InitializingBean接口
  Declared init method called-bean的声明中指定了init-method
  Bean post-processors get "after-initialization" callback-在容器中注册过的post-processor的

方法被调用
  Bean is used-容器只会保持对singleton bean的引用,所以下面的过程prototype bean不会参与
  Bean destruction begin-bean被销毁的顺序和初始顺序相反
  Bean post-processors get "destroy" callback-在容器中注册过的post-processor的方法被调用
  destroy() called-如果bean实现了DisposableBean接口
  Declared destroy method called-如果bean的声明中指定了destroy-method

FactoryBean接口
  用来创建其他对象的bean。当其他bean使用<ref>标签引用或者通过getBean()方法得到FactoryBean时

,容器返回的不是这个bean本身,而是通过它的getObject()方法得到返回对象。若想得到FactoryBean本

身,可以在它的名字前加'&',如getBean("&aFactoryBean")。
  Spring中内置的FactoryBean:
  JndiObjectFactoryBean-用于JNDI查找的factory bean
  ProxyFactoryBean-使用代理机制,返回一个被“包装”过的类,提供一些额外的功能
  TransactionProxyFactoryBean-使用代理机制,返回一个被“包装”过的类,提供事务处理功能
  RmiProxyFactoryBean-使用代理机制,返回一个被“包装”过的类,提供远程方法调用
  LocalSessionFactoryBean-配置并返回一个Hibernate SessionFactory对象
  LocalStatelessSessionProxyFactoryBean,SimpleRemoteStatelessSessionProxyFactoryBean-使用代

理机制,返回一个被“包装”过的类,提供访问无状态Session Bean的功能
  MethodInvokingFactoryBean-返回另一个bean的方法调用的结果
  FieldRetrievingFactoryBean-返回另一个bean的属性的值
  JMS-related factory beans-返回处理JMS资源的对象

Child Bean的定义
  使用parent=xxx来指定parent bean。
  child bean从parent bean中继承了属性、构造器参数的定义,如果定义child bean时指定了不同的

class,则这个class必须包含对应的属性或者有满足对应参数的构造器
  不会从parent bean继承的属性:depends-on,autowire,dependency-check,singleton,lazy-init