Srping ioc 之DefaultListableBeanFactory

参考资料:《Spring揭秘》
Spring ioc是一个提供ioc支持的容器,ioc就不废话了。

Spring提供两种容器类型:BeanFactory ApplicationContext
BeanFactory是基础类型的ioc容器,默认采用延迟初始化的策略(lazy-load),所以容器启动初期速度较快,ApplicationContext是在BeanFactory的基础之上构建的。功能更多(这些多事废话)……..

先看看BeanFactory的定义:

public interface BeanFactory {

    String FACTORY_BEAN_PREFIX = "&";

    Object getBean(String name) throws BeansException;

    <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;

    boolean containsBean(String name);

    boolean isSingleton(String name) throws NoSuchBeanDefinitionException;

    boolean isPrototype(String name) throws NoSuchBeanDefinitionException;

    boolean isTypeMatch(String name, Class targetType) throws NoSuchBeanDefinitionException;

    Class<?> getType(String name) throws NoSuchBeanDefinitionException;

    String[] getAliases(String name);
}
/*这些方法的意思,看名字就知道了。*/

DefaultListableBeanFactory是BeanFactory的一个实现类。
这里写图片描述
这是DefaultListableBeanFactory的继承关系图
(图片来自http://www.cnblogs.com/davidwang456/p/4187012.html

public class DefaultListableBeanFactory extends AbstractAutowireCapableBeanFactory implements ConfigurableListableBeanFactory, BeanDefinitionRegistry, Serializable {

他实现了BeanDefinitionRegistry,BeanDefinitionRegistry通过名字可以知道这是一个BeanDefinition的注册器

在SPring中,每个Bean都有一个对应的BeanDefinition,这个类负责保存对应的Bean的信息,包括class类型,是否抽象,构造方法,以及参数和其他属性。


package org.springframework.beans.factory.config;

import org.springframework.beans.BeanMetadataElement;
import org.springframework.beans.MutablePropertyValues;
import org.springframework.core.AttributeAccessor;

/**
 * A BeanDefinition describes a bean instance, which has property values,
 * constructor argument values, and further information supplied by
 * concrete implementations.
 *
 * <p>This is just a minimal interface: The main intention is to allow a
 * {@link BeanFactoryPostProcessor} such as {@link PropertyPlaceholderConfigurer}
 * to introspect and modify property values and other bean metadata.
 *
 * @author Juergen Hoeller
 * @author Rob Harrop
 * @since 19.03.2004
 * @see ConfigurableListableBeanFactory#getBeanDefinition
 * @see org.springframework.beans.factory.support.RootBeanDefinition
 * @see org.springframework.beans.factory.support.ChildBeanDefinition
 */                                    
public interface BeanDefinition extends AttributeAccessor, BeanMetadataElement {


    String SCOPE_SINGLETON = ConfigurableBeanFactory.SCOPE_SINGLETON;


    String SCOPE_PROTOTYPE = ConfigurableBeanFactory.SCOPE_PROTOTYPE;



    int ROLE_APPLICATION = 0;

    int ROLE_SUPPORT = 1;


    int ROLE_INFRASTRUCTURE = 2;


    String getParentName();


    void setParentName(String parentName);


    String getBeanClassName();


    void setBeanClassName(String beanClassName);

    String getFactoryBeanName();

    void setFactoryBeanName(String factoryBeanName);


    String getFactoryMethodName();


    void setFactoryMethodName(String factoryMethodName);
    String getScope();
    void setScope(String scope);

    boolean isLazyInit();

    void setLazyInit(boolean lazyInit);

    String[] getDependsOn();

    void setDependsOn(String[] dependsOn);
    boolean isAutowireCandidate();

    void setAutowireCandidate(boolean autowireCandidate);

    boolean isPrimary();

    void setPrimary(boolean primary);

     /*构造函数的参数值*/
    ConstructorArgumentValues getConstructorArgumentValues();

    MutablePropertyValues getPropertyValues();

    boolean isSingleton();
    boolean isPrototype();


    boolean isAbstract();

    int getRole();


    String getDescription();

    String getResourceDescription();

    BeanDefinition getOriginatingBeanDefinition();

}

这是BeanDefinition接口的定义。
然后在 DefaultListableBeanFactory对应的有一个数据结构来保存每个Bean对应的BeanDefinition


    /** Map of bean definition objects, keyed by bean name */
    /*bean definition*/
    private final Map<String, BeanDefinition> beanDefinitionMap = new ConcurrentHashMap<String, BeanDefinition>();

DefaultListableBeanFactory用了一个Map来保存这些信息,这样每一个Bean在DefaultListableBeanFactory中都有信息保存了下来,为生成Bean提供条件
还在看Spring的源码,DefaultListableBeanFactory就先这么简单的说一下,

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值