Spring十分庞大,里面用了很多设计模式,而且编程几度风雨Spring却像一个不老顽童一样,现在就开启Spring源码分析之旅,这一篇主要写Spring的组成及其结构以及各个类的职责介绍
Spring两大核心类
一 DefaultListableBeanFactory
- DefaultListableBeanFactory
DefaultListableBeanFactory是整个bean加载的核心部分,包含了所有的bean信息,XmlBeanFactory继承了他,不同的是XmlBeanFactory使用了个性化的XmlBeanDefinitionReader来读取配置文件
public XmlBeanFactory(Resource resource, BeanFactory parentBeanFactory) throws BeansException {
super(parentBeanFactory);
this.reader = new XmlBeanDefinitionReader(this);
this.reader.loadBeanDefinitions(resource);
}
-
AliasRegistry
定义对Alias的简单的增删改查的操作,alias就是别名,比如map.put("Yanglele",Yanglele.class); 在容器里面Yanglele就是Yanglele.class的别名
public interface AliasRegistry { void registerAlias(String var1, String var2); void removeAlias(String var1); boolean isAlias(String var1); String[] getAliases(String var1); } -
SimpleAliasRegistry
public class SimpleAliasRegistry implements AliasRegistry { protected final Log logger = LogFactory.getLog(this.getClass()); private final Map<String, String> aliasMap = new ConcurrentHashMap(16); -----主要使用map作为alias的缓存,并对AliasRegistry进行实现
-
BeanDefinitionRegistry
public interface BeanDefinitionRegistry extends AliasRegistry { void registerBeanDefinition(String var1, BeanDefinition var2) throws BeanDefinitionStoreException; void removeBeanDefinition(String var1) throws NoSuchBeanDefinitionException; BeanDefinition getBeanDefinition(String var1) throws NoSuchBeanDefinitionException;定义对BeanDefinition各种的增删改查的操作
-
SingletonBeanRegistry
定义对单例的注册和获取
public interface SingletonBeanRegistry { void registerSingleton(String var1, Object var2); @Nullable Object getSingleton(String var1); boolean containsSingleton(String var1); String[] getSingletonNames(); int getSingletonCount(); Object getSingletonMutex(); } -
DefaultSingletonBeanRegistry
对接口SingletonBeanRegistry中函数的实现
public class DefaultSingletonBeanRegistry extends SimpleAliasRegistry implements SingletonBeanRegistry { private static final int SUPPRESSED_EXCEPTIONS_LIMIT = 100; private final Map<String, Object> singletonObjects = new ConcurrentHashMap(256); private final Map<String, ObjectFactory<?>> singletonFactories = new HashMap(16); private final Map<String, Object> earlySingletonObjects = new ConcurrentHashMap(16); -
FactoryBeanRegistrySupport
在DefaultSingletonBeanRegistry基础上增加了对FactoryBean特殊功能处理
-
BeanFactory
public interface BeanFactory { String FACTORY_BEAN_PREFIX = "&"; Object getBean(String var1) throws BeansException; <T> T getBean(String var1, Class<T> var2) throws BeansException; --------定义获取Bean和Bean的各种属性
-
HierarchicalBeanFactory
public interface HierarchicalBeanFactory extends BeanFactory { @Nullable BeanFactory getParentBeanFactory(); boolean containsLocalBean(String var1); }继承了BeanFactory,在BeanFactory基础上增加了对parentFactory的支持(Hierarchical译为分层的)
二 XmlBeanDefinitionReader
XmlBeanFactory继承了他,不同的是XmlBeanFactory使用了个性化的XmlBeanDefinitionReader来读取配置文件
-
EnvironmentCapable
定义获取Environment方法
-
BeanDefinitionReader 定义资源文件读取并转化为BeanDefinition
public interface BeanDefinitionReader { BeanDefinitionRegistry getRegistry(); @Nullable ResourceLoader getResourceLoader(); @Nullable ClassLoader getBeanClassLoader(); ------ -
AbstractBeanDefinitionReader
对BeanDefinitionReader和EnvironmentCapable中的方法进行实现
public abstract class AbstractBeanDefinitionReader implements BeanDefinitionReader, EnvironmentCapable { protected final Log logger = LogFactory.getLog(this.getClass());