1.BeanFactory解析

package org.springframework.beans.factory;

import org.springframework.beans.BeansException;
import org.springframework.core.ResolvableType;
//BeanFactory 解析   17/04/27
public interface BeanFactory {

    //这里是对FactoryBean的转义定义,因为如果使用bean的名字检索FactoryBean得到的对象是工厂生成的对象,  
    //如果需要得到工厂本身,需要转义    
    //转义符“&”用来获取FactoryBean本身
    String FACTORY_BEAN_PREFIX = "&";


    //根据bean的名字进行获取bean的实例,这是IOC最大的抽象方法
    Object getBean(String name) throws BeansException;

    //根据bean的名字和Class类型进行获取Bean的实例,和上面方法不同的是,bean名字和Bean 的class类型不同时候会爆出异常
    <T> T getBean(String name, Class<T> requiredType) throws BeansException;

    <T> T getBean(Class<T> requiredType) throws BeansException;


    Object getBean(String name, Object... args) throws BeansException;

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


    
     //检测这个IOC容器中是否含有这个Bean
    boolean containsBean(String name);

    
     //判断这个Bean是不是单利
    boolean isSingleton(String name) throws NoSuchBeanDefinitionException;

     //检测Bena是不是多例,
    boolean isPrototype(String name) throws NoSuchBeanDefinitionException;


     //查询指定的bean的名字和Class类型是不是指定的Class类型
    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);

}

Spring IOC容器最基本的接口BeanFactory,定义了IOC容器最基本的规范,不管如何,作为IOC的容器,这个接口必须满足容器的基本要求.

BeanFactory里只对IOC容器的基本行为作了定义,对于这个工厂怎么做的,我们根本不需要关i心,我们需要的是关心我们要的bean,

我们也可以自己来继承Bean,但是没有必要,Spring中提供了相对应得很多实现了beanfactory的模板给我们调用,

AbstractBeanFactory,DefaultListableBeanFactory,通过resource接口来定义bean数据,然后

对Xml定义文件的解析通过委托给XmlBeanDefinitionReader来完成,

创建IOC的过程:

ClassPathResource  beanxml =new ClassPathResource("bean.xml");
DefaultListableBeanFactory factory =new DefaultListableBeanFactory();
XmlBeanDefinitionReader reader=new XmlBeanDefinitionReader(factory);
reader.loadBeanDefinitions(beanxml);

以上几部解析:

1.创建Ioc的容器抽象资源

2.创建工厂

3.创建一个读取抽象资源的的  BeanDefinitionReader ,来读取配置文件

4.读取到信息配置到factory中

 很明显,这是一个典型的工厂模式的工厂接口。



原文地址:https://www.cnblogs.com/java-synchronized/p/6775042.html