当前位置: 首页 > news >正文

个人网站企业网站济宁专业网站开发公司

个人网站企业网站,济宁专业网站开发公司,中国舆情观察网,黄山旅游最佳路线安排ApplicationContext 和 BeanFactory 是 Spring 框架中两个核心的接口,它们都用于管理和访问 Spring 容器中的 Bean,但在功能和使用场景上有显著的区别。以下是它们的详细对比,并结合源码进行讲解。 一、 功能对比 特性BeanFactoryApplicati…

ApplicationContext 和 BeanFactory 是 Spring 框架中两个核心的接口,它们都用于管理和访问 Spring 容器中的 Bean,但在功能和使用场景上有显著的区别。以下是它们的详细对比,并结合源码进行讲解。

一、 功能对比

特性BeanFactoryApplicationContext
Bean 管理支持基本的 Bean 管理和依赖注入。支持 BeanFactory 的所有功能,并扩展了更多特性。
事件发布不支持。支持事件发布机制(ApplicationEvent)。
国际化支持不支持。支持国际化(MessageSource)。
资源访问不支持。支持资源访问(ResourceLoader)。
AOP 支持不支持。支持 AOP(面向切面编程)。
注解支持不支持。支持注解配置(如 @Component@Autowired)。
加载时机懒加载(Lazy Loading)。预加载(Eager Loading),启动时初始化所有单例 Bean。
使用场景适合资源受限的环境(如移动设备)。适合大多数企业级应用。

二、源码讲解

1、BeanFactory源码

BeanFactory是Spring容器的最基本接口,定义了Bean的获取和管理方法

public interface BeanFactory {// 获取 BeanObject getBean(String name) throws BeansException;
​// 获取指定类型的 Bean<T> T getBean(String name, Class<T> requiredType) throws BeansException;
​// 判断是否包含指定名称的 Beanboolean containsBean(String name);
​// 判断 Bean 是否为单例boolean isSingleton(String name) throws NoSuchBeanDefinitionException;
​// 判断 Bean 是否为原型boolean isPrototype(String name) throws NoSuchBeanDefinitionException;
​// 获取 Bean 的类型Class<?> getType(String name) throws NoSuchBeanDefinitionException;
​// 获取 Bean 的别名String[] getAliases(String name);
}
  • 特点

    • BeanFactory是一个简单的容器接口,只提供最基本的Bean管理功能

    • 默认适用懒加载(Lazy Loading)机制,只有在调用getBean()时才会初始化Bean

2、ApplicationContext 源码

ApplicationContextBeanFactory 的子接口,扩展了更多功能。

public interface ApplicationContext extends EnvironmentCapable, ListableBeanFactory, HierarchicalBeanFactory,MessageSource, ApplicationEventPublisher, ResourcePatternResolver {
​// 获取容器的唯一 IDString getId();
​// 获取容器的显示名称String getDisplayName();
​// 获取容器的启动时间long getStartupDate();
​// 获取父容器ApplicationContext getParent();
​// 获取 AutowireCapableBeanFactoryAutowireCapableBeanFactory getAutowireCapableBeanFactory() throws IllegalStateException;
}
  • 扩展功能:

    1. 事件发布

      void publishEvent(ApplicationEvent event);
      • 支持事情驱动变成,可以通过ApplicationEventPublisher发布事件

    2. 国际化支持

      String getMessage(String code, Object[] args, String defaultMessage, Locale locale);
      • 支持通过MessageSource实现国际化

    3. 资源访问

      Resource[] getResources(String locationPattern) throws IOException;
      • 支持通过ResourceLoader访问资源文件

    4. AOP支持

      • 通过集成AOP模块,支持面向切面编程

    5. 注解支持

      • 支持通过注解(如@Component、@Autowired)配置Bean

  • 特点:

    • ApplicationContext 是一个高级容器接口,提供了更多企业级功能。

    • 默认采用预加载(Eager Loading)机制,启动时初始化所有单例 Bean。

三、具体实现类

1、BeanFactory 的实现类

  • DefaultListableBeanFactory

    • 是BeanFactory的默认实现类,提供了完整的Bean管理功能

    • 源码示例:

      DefaultListableBeanFactory beanFactory = new DefaultListableBeanFactory();
      XmlBeanDefinitionReader reader = new XmlBeanDefinitionReader(beanFactory);
      reader.loadBeanDefinitions(new ClassPathResource("beans.xml"));
      MyBean myBean = beanFactory.getBean(MyBean.class);

    (这里就是在Resources下beans.xml这个文件,约定大于配置)

2、ApplicationContext的实现类

  • ClassPathXmlApplicationContext

    • 从类路径加载 XML 配置文件的 ApplicationContext实现。

    • 源码示例:

      ApplicationContext context = new ClassPathXmlApplicationContext("beans.xml");
      MyBean myBean = context.getBean(MyBean.class);
  • AnnotationConfigApplicationContext

    • 基于注解配置的ApplicationContext实现

    • 源码示例

      ApplicationContext context = new AnnotationConfigApplicationContext(AppConfig.class);
      MyBean myBean = context.getBean(MyBean.class);

    AppConfig注解类

  • FileSystemXmlApplicationContext

    • 用于读取系统文件目中的配置文件

四、 使用场景

  • BeanFactory

    • 适合资源受限的环境(如移动设备)。

    • 需要手动调用 getBean() 初始化 Bean。

  • ApplicationContext

    • 适合大多数企业级应用。

    • 提供更多高级功能(如事件发布、国际化、AOP 等)。


五、 总结

  • BeanFactory 是 Spring 容器的基础接口,提供最基本的 Bean 管理功能。

  • ApplicationContextBeanFactory 的扩展,提供了更多企业级功能。

  • 在实际开发中,通常使用 ApplicationContext,因为它功能更强大,使用更方便。

通过理解 BeanFactoryApplicationContext 的区别和源码实现,可以更好地掌握 Spring 容器的核心机制。

http://www.yayakq.cn/news/508094/

相关文章:

  • 网站域名重定向怎么做百度推广培训
  • 有些电影网站是怎么做的大数据营销的运营方式有哪些
  • 东莞wordpress建站软文广告推广
  • 带漂浮广告的网站网站建设的常用技术有哪些
  • 怎么做一个个人网站图书馆网站结构怎么做
  • 维护网站的职位叫什么餐饮类网站设计
  • 来年做哪些网站能致富最便宜的货源网站大全
  • 网站开发毕设参考文献seo的中文意思是什么
  • 市住房和城乡规划建设局网站wordpress 网上支付
  • 中山做网站比较好网站开发兼容ie
  • 单位网站备案要等多久网站设计论文介绍
  • 好学校平台网站模板中国服务器龙头企业
  • 上海电商网站建设费用平台开发工程师
  • 开公司 专做网站网站换空间上怎么办
  • zencart网站管理 1.5商业网站的建设流程
  • 做网站杭州公司做两个网站
  • 莱芜手机网站建设报价阳山网站seo
  • 优秀网站建设价格美容培训东莞网站建设
  • 信用渭南网站建设珠海网站制作推广公司
  • 网站建设果麦科技深圳做网站找哪家好
  • 临沧网站搭建互联网推广是做什么的
  • php 读取网站文件怎样用ps做企业网站
  • 如何找人做网站致力于网站建设
  • h5网站怎么做的陈金凌 wordpress
  • 渭南公司做网站企业建设网站的规定
  • 做网站最小的字体是多少像素wordpress 公司展示
  • 衡水网站建设制作市场营销网络
  • 个人网站备案 名称wordpress 生成海报
  • 做企业网站织梦和wordpress哪个好wordpress子页面不显示
  • 网页设计与网站建设考试题工信部网站域名备案查询