Spring底层原理之 BeanFactory 与 ApplicationContext

简介: Spring底层原理之 BeanFactory 与 ApplicationContext

一、 BeanFactory 与 ApplicationContext

  • 什么是BeanFactory ?
  • BeanFactory 是ApplicationContext的父接口
  • BeanFactory 才是Spring的核心容器,主要的ApplicationContext实现都组合了它的功能
  • 在SpringBoot的引导类中,利用SpringApplication.run(DobboProApplication.class, args);代码启动Spring程序,其中,第一个参数是引导类类型,第二个参数是main方法传过来的命令行参数
  • 这个run方法有一个返回结果:ConfigurableApplicationContext context = SpringApplication.run(DobboProApplication.class, args);
  • 这个返回结果所对应的对象就是Spring容器
  • 从类图中可以看出,ApplicationContext间接继承了BeanFactory
  • 从容器中获取beancontext.getBean("aaa");
  • 获取bean的方法并不是ApplicationContext提供的,而是间接使用BeanFactory提供的getBean方法
  • 可以看一下getBean的具体实现:
public Object getBean(String name) throws BeansException {
        this.assertBeanFactoryActive();
        return this.getBeanFactory().getBean(name);
    }
  • getBean的具体实现中可以看出,首先是获取BeanFactory,然后调用BeanFactory中的getBean方法,实际上调用的是BeanFactorygetBean方法。
  • BeanFactoryApplicationContext的一个成员变量:


二、 BeanFactory 功能

  • BeanFactory 的接口


  • BeanFactory 的实现类:


  • BeanFactory对于控制反转、基本的依赖注入、Bean的生命周期,都有其对应的实现类

三、ApplicationContext 功能

3.1 getMessage

  • getMessage:读取一个key翻译后的结果,可以支持多种语言(中文、英文等)
public static void main(String[] args) {
    ConfigurableApplicationContext context = SpringApplication.run(DobboProApplication.class, args);
    System.out.println(context.getMessage("hi", null, Locale.CHINA));
    System.out.println(context.getMessage("hi", null, Locale.ENGLISH));
    System.out.println(context.getMessage("hi", null, Locale.JAPANESE));
  }

3.2 getResources

  • getResources:获取资源
  • classpath::从类路径中获取资源
  • file::从磁盘路径中获取资源
public static void main(String[] args) throws IOException {
    ConfigurableApplicationContext context = SpringApplication.run(DobboProApplication.class, args);
    Resource[] resources = context.getResources("classpath:application.properties");
    for (Resource resource : resources) {
      System.out.println(resource);
    }
  }

public static void main(String[] args) throws IOException {
    ConfigurableApplicationContext context = SpringApplication.run(DobboProApplication.class, args);
    Resource[] resources = context.getResources("classpath*:META-INF/spring.factories");
    for (Resource resource : resources) {
      System.out.println(resource);
    }


3.3 getEnvironment

  • getEnvironment:获取环境信息
System.out.println(context.getEnvironment().getProperty("java_home"));


相关文章
|
23天前
|
XML Java 数据格式
探索Spring之利剑:ApplicationContext接口
本文深入介绍了Spring框架中的核心接口ApplicationContext,解释了其作为应用容器的功能,包括事件发布、国际化支持等,并通过基于XML和注解的配置示例展示了如何使用ApplicationContext管理Bean实例。
47 6
|
2月前
|
XML Java 开发者
Spring Boot开箱即用可插拔实现过程演练与原理剖析
【11月更文挑战第20天】Spring Boot是一个基于Spring框架的项目,其设计目的是简化Spring应用的初始搭建以及开发过程。Spring Boot通过提供约定优于配置的理念,减少了大量的XML配置和手动设置,使得开发者能够更专注于业务逻辑的实现。本文将深入探讨Spring Boot的背景历史、业务场景、功能点以及底层原理,并通过Java代码手写模拟Spring Boot的启动过程,为开发者提供一个全面的理解。
38 0
|
18天前
|
NoSQL Java Redis
Spring Boot 自动配置机制:从原理到自定义
Spring Boot 的自动配置机制通过 `spring.factories` 文件和 `@EnableAutoConfiguration` 注解,根据类路径中的依赖和条件注解自动配置所需的 Bean,大大简化了开发过程。本文深入探讨了自动配置的原理、条件化配置、自定义自动配置以及实际应用案例,帮助开发者更好地理解和利用这一强大特性。
68 14
|
2月前
|
Java 开发者 Spring
Spring AOP 底层原理技术分享
Spring AOP(面向切面编程)是Spring框架中一个强大的功能,它允许开发者在不修改业务逻辑代码的情况下,增加额外的功能,如日志记录、事务管理等。本文将深入探讨Spring AOP的底层原理,包括其核心概念、实现方式以及如何与Spring框架协同工作。
|
3月前
|
Java Spring 容器
Spring底层原理大致脉络
Spring底层原理大致脉络
|
3月前
|
XML 前端开发 Java
拼多多1面:聊聊Spring MVC的工作原理!
本文详细剖析了Spring MVC的工作原理,涵盖其架构、工作流程及核心组件。Spring MVC采用MVC设计模式,通过DispatcherServlet、HandlerMapping、Controller和ViewResolver等组件高效处理Web请求。文章还探讨了DispatcherServlet的初始化和请求处理流程,以及HandlerMapping和Controller的角色。通过理解这些核心概念,开发者能更好地构建可维护、可扩展的Web应用。适合面试准备和技术深挖
49 0
|
3月前
|
负载均衡 Java API
Spring Cloud原理详解
Spring Cloud原理详解
83 0
|
Java Spring
Spring原理学习系列之五:IOC原理之Bean加载
其实很多同学都想通过阅读框架的源码以汲取框架设计思想以及编程营养,Spring框架其实就是个很好的框架源码学习对象。我们都知道Bean是Spring框架的最小操作单元,Spring框架通过对于Bean的统一管理实现其IOC以及AOP等核心的框架功能,那么Spring框架是如何把Bean加载到环境中来进行管理的呢?本文将围绕这个话题进行详细的阐述,并配合Spring框架的源码解析。
Spring原理学习系列之五:IOC原理之Bean加载
|
3月前
|
人工智能 自然语言处理 前端开发
SpringBoot + 通义千问 + 自定义React组件:支持EventStream数据解析的技术实践
【10月更文挑战第7天】在现代Web开发中,集成多种技术栈以实现复杂的功能需求已成为常态。本文将详细介绍如何使用SpringBoot作为后端框架,结合阿里巴巴的通义千问(一个强大的自然语言处理服务),并通过自定义React组件来支持服务器发送事件(SSE, Server-Sent Events)的EventStream数据解析。这一组合不仅能够实现高效的实时通信,还能利用AI技术提升用户体验。
256 2
|
11天前
|
Java 数据库连接 Maven
最新版 | 深入剖析SpringBoot3源码——分析自动装配原理(面试常考)
自动装配是现在面试中常考的一道面试题。本文基于最新的 SpringBoot 3.3.3 版本的源码来分析自动装配的原理,并在文未说明了SpringBoot2和SpringBoot3的自动装配源码中区别,以及面试回答的拿分核心话术。
最新版 | 深入剖析SpringBoot3源码——分析自动装配原理(面试常考)