文章目录
参考
https://www.cnblogs.com/chaohangz/p/12043783.html
https://blog.csdn.net/q649381130/article/details/78465668
https://blog.csdn.net/a909301740/article/details/78379720
https://blog.csdn.net/greedystar/article/details/81092836
容器
容器 是Spring的核心。Spring自带多个容器的实现,可以归纳为两种不同的类型:
- Bean工厂 (BeanFactory),最简单的容器,提供基本的 DI 支持。
- 应用上下文 (ApplicationContext),继承了BeanFactory,并提供应用框架级别的服务,是IOC容器的高级形式。
BeanFactory
BeanFactory 是IOC容器接口中最顶层的接口,定义了IOC容器的基本规范。
BeanFactory共有三个直接的子类:
ListableBeanFactory、HierarchicalBeanFactory 和 AutowireCapableBeanFactory。
- ListableBeanFactory 接口表示Bean是可列表化的。
- HierarchicalBeanFactory 接口表示Bean是有继承关系的,可以管理父IOC容器。
- AutowireCapableBeanFactory 接口表示Bean是自动装配的。
BeanFactory 接口主要源码:
public interface BeanFactory {
String FACTORY_BEAN_PREFIX = "&";
Object getBean(String name) throws BeansException;
<T> T getBean(String name, @Nullable 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;
boolean containsBean(String name);
boolean isSingleton(String name) throws NoSuchBeanDefinitionException;
boolean isPrototype(String njame) throws NoSuchBeanDefinitionException;
boolean isTypeMatch(String name, ResolvableType typeToMatch) throws NoSuchBeanDefinitionEx-ception;
boolean isTypeMatch(String name, @Nullable Class<?> typeToMatch) throws NoSuchBeanDefinition-Exception;
Class<?> getType(String name) throws NoSuchBeanDefinitionException;
String[] getAliases(String name);
}
XmlBeanFactory
XmlBeanFactory 是一个简单的 IOC容器的实现,它继承自 DefaultListableBeanFactory 。Spring中将 DefaultListableBeanFactory 作为一个默认的功能完整的IOC容器使用,XmlBeanFactory 在DefaultListableBeanFactory 的基础上扩展了读取以 XML格式定义的 BeanDefinition(Spring中描述 Bean 的类)的功能,XmlBeanFactory 主要源码如下所示:(这个类已经在 Spring3.1中被标明废弃)
public class XmlBeanFactory extends DefaultListableBeanFactory {
private final XmlBeanDefinitionReader reader = new XmlBeanDefinitionReader(this);
public XmlBeanFactory(Resource resource) throws BeansException;
public XmlBeanFactory(Resource resource, BeanFactory parentBeanFactory) throws BeansException;
}
ApplicationContext
ApplicationContext 作为一系列重要的容器产品,一方面继承了 BeanFactory 基本的IOC容器功能;另一方面,对BeanFactory进行了功能扩展。
ApplicationContext 主要源码:
public interface ApplicationContext extends
EnvironmentCapable, ListableBeanFactory, HierarchicalBeanFactory,
MessageSource, ApplicationEventPublisher, ResourcePatternResolver {
@Nullable
String getId();
String getApplicationName();
String getDisplayName();
long getStartupDate();
@Nullable
ApplicationContext getParent();
AutowireCapableBeanFactory getAutowireCapableBeanFactory() throws IllegalStateException;
}
ApplicationContext 继承 ApplicationEventPublisher、ResourcePatternResolver、MessageSource、EnvironmentCapable 接口,例如:
- ApplicationEventPublisher:支持应用事件
- MessageSource:支持国际化信息源
- ResourcePatternResolver: 允许以路径模式定位Resource
- EnvironmentCapable:应用上下文环境检查
FileSystemXmlApplicationContext 和 ClassPathXmlApplicationContext
FileSystemXmlApplicationContext 和 ClassPathXmlApplicationContext 是常用的应用上下文,分别实现了从 文件系统 和 类路径 读取 以XML格式 定义的 BeanDefinition 的功能。