首页 > 编程语言 >Spring源码-03-容器创建

Spring源码-03-容器创建

时间:2022-12-05 22:37:21浏览次数:61  
标签:AnnotationConfigApplicationContext 容器 03 Spring Bean 源码 注解 IoC public

Spring源码-03-容器创建

注解Bean方式

public class AnnotationCtxMain02 {

	public static void main(String[] args) {
		new AnnotationConfigApplicationContext(MyCfg02.class);
	}
}
// AnnotationConfigApplicationContext.java
public AnnotationConfigApplicationContext(Class<?>... componentClasses) {
		/**
		 * 完成容器的基础组件初始化
		 *     - beanFactory
		 *         - 实现是DefaultListableBeanFactory
		 *     - reader
		 *         - 注解Bean读取
		 *         - BeanDefinition注入容器
		 *     - scanner
		 *         - 指定路径扫包
		 *         - BeanDefinition注入容器
		 */
		this();
		this.register(componentClasses); // Bean读取器读取注解Bean将类信息封装BeanDefinition注入容器 配置类
		/**
		 * 到此为止完成了准备工作
		 *     - 向IoC容器中注册了用于处理注解Bean这种场景下的后置处理器
		 *     - 向IoC容器中注册了用户配置类
		 *
		 * 
		 */
		super.refresh();
	}

容器创建主要3个步骤

  • 基础组件初始化
  • 注入BeanDefinition
  • refresh

一 基础组件

// AnnotationConfigApplicationContext.java
public AnnotationConfigApplicationContext() {
		super();
		StartupStep createAnnotatedBeanDefReader = this.getApplicationStartup().start("spring.context.annotated-bean-reader.create");
		this.reader = new AnnotatedBeanDefinitionReader(this); // 注解Bean读取器
		createAnnotatedBeanDefReader.end();
		this.scanner = new ClassPathBeanDefinitionScanner(this); // 路径扫包器
	}
// GenericApplicationContext.java
public GenericApplicationContext() {
		super();
		this.beanFactory = new DefaultListableBeanFactory();
	}
// AbstractApplicationContext.java
public AbstractApplicationContext() {
		this.resourcePatternResolver = getResourcePatternResolver();
	}

也就是如图

二 注解Bean读取器

传送

完成了2个工作

  • 向IoC容器中注册了用于处理注解Bean这种场景下的后置处理器
  • 向IoC容器中注册了用户配置类
后置处理器类
ConfigurationClassPostProcessor
AutowiredAnnotationBeanPostProcessor
CommonAnnotationBeanPostProcessor
InitDestroyAnnotationBeanPostProcessor
PersistenceAnnotationBeanPostProcessor
EventListenerMethodProcessor
DefaultEventListenerFactory

三 refresh

传送

标签:AnnotationConfigApplicationContext,容器,03,Spring,Bean,源码,注解,IoC,public
From: https://www.cnblogs.com/miss-u/p/16953742.html

相关文章

  • Spring源码-02-Bean容器
    Spring源码-02-Bean容器一类关系二宏观视角......
  • Spring源码-04-注解Bean读取器
    Spring源码-04-注解Bean读取器AnnotatedBeanDefinitionReader一构造方法publicAnnotatedBeanDefinitionReader(BeanDefinitionRegistryregistry,Environmentenviro......
  • Spring依赖注入的方式
    Spring依赖注入有两种类型:setter注入,和构造器注入。setter注入中有简单类型的注入和引用类型的注入,构造器注入也是分这两个类型。setter注入简单类型(直接类型):就是在<prop......
  • SpringBoot防止XSS
    前言:什么是XSS在跨站脚本(XSS)攻击中,攻击者可以在受害者的浏览器中执行恶意脚本。这种攻击通常是通过在网页中插入恶意代码(JavaScript)来完成的。攻击者在使用攻击后一般......
  • Springboot 系列 (20) - Springboot+ElasticSearch 实现全文搜索(二)
    在“Springboot系列(19)-Springboot+ElasticSearch实现全文搜索(一)”里我们演示了安装配置ElasticSearch和使用curl调用ElasticSearchAPI,本文将演示在Springb......
  • SpringBooot整合spring Data JPA多数据源
    Springboot整合springdatajpa多数据源在使用Mybatis时会涉及多数据源的问题,同样,当我们使用Jpa作为持久化处理方式时,也会涉及多数据源的问题,本节我们来讲解一下Sprin......
  • SpringBoot整合Spring Data JPA多数据源
    Springboot整合springdatajpa多数据源在使用Mybatis时会涉及多数据源的问题,同样,当我们使用Jpa作为持久化处理方式时,也会涉及多数据源的问题,本节我们来讲解一下Springboot......
  • Springboot 系列 (19) - Springboot+ElasticSearch 实现全文搜索(一)
    全文检索(Full-textSearch)是指计算机索引程序通过扫描文章中的每一个词,对每一个词建立一个索引,指明该词在文章中出现的次数和位置,当用户查询时,检索程序就根据事先建立的索......
  • day44 6-9 spring框架IOC与AOP(视频) & 6-10 集成mybatis框架 & 6-11 mybatis映射文件标
    MyBatis什么是持久化将数据(如内存中对象)保存到可以永久保存的存储设备中(如磁盘),持久化的主要应用是将内存的数据存储在关系型数据库中,也可存储在磁盘文件、xml数据文件中......
  • 探究lombok-03-@Builder使用
    Java8org.springframework.boot2.7.3lombok1.18.24EclipseVersion:2022-09(4.25.0)--ben发布于博客园 上一篇:探究lombok-02-类继承https://www.cnblogs.com/......