Spring-BeanFactory学习总结

BeanFactory:Spring-BeanFactory学习总结_第1张图片

     Spring Bean的创建是典型的工厂模式,这一系列的Bean工厂,也是IOC容器为开发者管理对象间的依赖关系提供了服务。

    其中BeanFactory作为spring最顶层的一个接口类,BeanFactory定义了IOC容器的基本功能规范,BeanFactory有三个子类:ListableBeanFactory、HierarchicalBeanFactory 和AutowireCapableBeanFactory。

    从图上的继承结构上看,DefaultListableBeanFactory实现了所有的接口。

    ListableBeanFactory表示这些Bean是可列表的。

    HierarchicalBeanFactory 表示这些Bean室友继承关系的,也就是每个Bean都有可能有一个父类Bean

    AutowireCapableBeanFactory表示Bean自动装配规则。

    最基本的IOC容器接口BeanFactory

 public interface BeanFactory {

	//对FactoryBean的转义定义,
	//因为如果使用Bean的名字检索FactoryBean得到的对象是工厂生成的对象
	//如果需要得到工厂本身,需要转义
	String FACTORY_BEAN_PREFIX = "&";

	//根据Bean的名字,获取IOC容器中得到Bean的实例
	Object getBean(String name) throws BeansException;

	//根据Bean的名字和Class类型来得到Bean的实例,增加了类型安全验证机制
	 T getBean(String name, Class requiredType) throws BeansException;
	
	 T getBean(Class requiredType) throws BeansException;
	
	Object getBean(String name, Object... args) throws BeansException;

	 T getBean(Class requiredType, Object... args) throws BeansException;

	//提供对Bean的检索,看看是否在IOC容器有这个名字的Bean
	boolean containsBean(String name);

	//根据Bean的名字得到Bean的实例,并同时判断这个Bean是不是单例
	boolean isSingleton(String name) throws NoSuchBeanDefinitionException;

	boolean isPrototype(String name) throws NoSuchBeanDefinitionException;
	
	boolean isTypeMatch(String name, ResolvableType typeToMatch) throws NoSuchBeanDefinitionException;
	
	boolean isTypeMatch(String name, Class typeToMatch) throws NoSuchBeanDefinitionException;

	//得到Bean实例的Class类型
	Class getType(String name) throws NoSuchBeanDefinitionException;

	//得到Bean的别名,如果根据别名检索,那么其原名也会被检索出来
	String[] getAliases(String name);

}

    在BeanFactory里面只对IOC容器的基本行为作了定义,根本不关系Bean是如何定义怎么加载的。这和工厂设计模式一样,只关心从工厂里得到什么对象,至于工厂是怎么生产的,这个接口一点都不关心。

    要想知道工厂是如何生产对象的,得看IOC容器具体如何实现,Spring提供了许多IOC容器的实现。例如XmlBeanFactory,ApplicationContext。

    XmlBeanFactory就是针对最基本的IOC容器的实现,这个IOC容器可以读取XML文件定义的BeanFactory,

    ApplicationContext是Spring提供的一个高级的IOC容器,它除了能够提供IOC容器的基本功能外,还为用户提供了其他的服务。

    1.支持信息源,可以实现国际化。(实现MessageSource 接口)
    2.访问资源。(实现ResourcePatternResolver 接口)

    3.支持应用事件。(实现ApplicationEventPublisher 接口)

BeanDefinition:

    SpringIOC容器管理了我们定义的各种Bean对象及其相互的关系,Bean对象在Spring实现中是BeanFinition来描述,继承关系如下。

Spring-BeanFactory学习总结_第2张图片

    Bean 的解析过程非常复杂,功能被分的很细,因为这里需要被扩展的地方很多,必须保证有足够的灵活性,以应对可能的变化。Bean 的解析主要就是对Spring 配置文件的解析。这个解析过程主要通过下图中的类完成。

Spring-BeanFactory学习总结_第3张图片

你可能感兴趣的:(源码学习)