这是我参与8月更文挑战的第22天,活动详情查看:8月更文挑战
前言
Spring源码系列
1.Resource 体系
org.springframework.core.io.Resource,对资源的抽象。它的每一个实现类都代表了一种资源的访问策略,如 ClassPathResource、RLResource、FileSystemResource 等。
2.ResourceLoader 体系
Spring 利用 org.springframework.core.io.ResourceLoader 来进行统一资源加载,主要应用于根据给定的资源文件地址,返回对应的 Resource 。
3.BeanDefinition 体系
org.springframework.beans.factory.config.BeanDefinition ,用来描述 Spring 中的 Bean 对象。
4.BeanDefinitionReader 体系
org.springframework.beans.factory.support.BeanDefinitionReader 的作用是读取 Spring 的配置文件的内容,并将其转换成 Ioc 容器内部的数据结构 :BeanDefinition 。
5.BeanFactory 体系
org.springframework.beans.factory.BeanFactory,是一个非常纯粹的 bean 容器,它是 IoC 必备的数据结构,其中 BeanDefinition 是它的基本结构。BeanFactory 内部维护着一个BeanDefinition map ,并可根据 BeanDefinition 的描述进行 bean 的创建和管理。
public interface BeanFactory {
String FACTORY_BEAN_PREFIX = "&";
// 根据 bean的名字,获取在IOC容器中得到bean实例
Object getBean(String name) throws BeansException;
// 根据 bean的名字和Class类型来得到 bean实例,增加了类型安全验证机制。
<T> T getBean(String name, Class<T> requiredType) throws BeansException;
Object getBean(String name, Object... args) throws BeansException;
<T> T getBean(Class<T> requiredType) throws BeansException;
<T> T getBean(Class<T> requiredType, Object... args) throws BeansException;
<T> ObjectProvider<T> getBeanProvider(Class<T> requiredType);
<T> ObjectProvider<T> getBeanProvider(ResolvableType requiredType);
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;
@Nullable
Class<?> getType(String name) throws NoSuchBeanDefinitionException;
@Nullable
Class<?> getType(String name, boolean allowFactoryBeanInit) throws NoSuchBeanDefinitionException;
String[] getAliases(String name);
}
BeanFactory 有三个重要的子类:
- ListableBeanFactory:表示这些 Bean是可列表化的
- HierarchicalBeanFactory:表示的是这些 Bean是有继承关系的
- AutowireCapableBeanFactory:定义Bean的自动装配规则
类 DefaultListableBeanFactory,它实现了所有的接口。