容器、BeanFactory、XmlBeanFactory、ApplicationContext、FileSystemXmlApplicationContext 和 ClassPathXmlAppli

本文深入探讨Spring框架中的核心容器概念,包括BeanFactory和ApplicationContext的区别,以及XmlBeanFactory、FileSystemXmlApplicationContext和ClassPathXmlApplicationContext等具体实现。解析了各容器的特性和应用场景。
摘要由CSDN通过智能技术生成

参考

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

FileSystemXmlApplicationContextClassPathXmlApplicationContext 是常用的应用上下文,分别实现了从 文件系统 和 类路径 读取 以XML格式 定义的 BeanDefinition 的功能。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值