Spring中的Bean的扫描、实例化、初始化

Spring中Bean的实例化的过程
在Spring启动之后,个人暂时将Spring注入Bean对象的过程分为3个大的步骤,分别是:
Bean的扫描→Bean的实例化→Bean的初始化。

第一步:Bean的扫描

在Spring启动的时候,AnnotationConfigApplicationContext的几种构造参数可以选择使用XML、配置类、包路径来进行扫描

//配置类扫描
 ApplicationContext ac=new AnnotationConfigApplicationContext(AppConfig.class);
//配置文件XML扫描
 ApplicationContext ac1 =new ClassPathXmlApplicationContext("Spring-rl.xml");
//直接包路径扫描
 ApplicationContext ac2 =new AnnotationConfigApplicationContext("com.test");

本文下面以注解类为启动流程
AppConfig.Class 配置类:

package com.asop.app;


import org.springframework.context.annotation.ComponentScan;

/**
 * @description:
 * @author:19047590
 * @date: Created in 2020-05-23 16:56
 */
@ComponentScan("com.asop")
public class AppConfig {

}

启动类:

public class Main {

    public static void main(String[] args) {
        AnnotationConfigApplicationContext ac=new AnnotationConfigApplicationContext(AppConfig.class);
}
}

AnnotationConfigApplicationContext 在启动的时候的构造函数

	public AnnotationConfigApplicationContext(Class<?>... componentClasses) {
		this();
		//在初始化的时候,直接将appConfig放入到bdMap中。否则就是不能执行了
		//这个方式就用来完成Spring中的初始化需要的一些基本的bd
		register(componentClasses);
		//Bean的注入
		refresh();
	}
		/**
	 * Create a new AnnotationConfigApplicationContext that needs to be populated
	 * through {@link #register} calls and then manually {@linkplain #refresh refreshed}.
	 */
	public AnnotationConfigApplicationContext() {
		//reader 对于外部的beanDefinition进行读取的
		//父类的构造方法 创建一个读取注解的Bean定义读取器
		this.reader = new AnnotatedBeanDefinitionReader(this);
		//可以用来扫描包或者类 然后转化成bd
		//实际上扫描包工作的时候不是scanner这个对象完成的
		//是Spring自己new一个ClassPathBeanDefinitionScanner
		//这里的scanner仅仅是为了能够在外部调用AnnotationConfig
		this.scanner = new ClassPathBeanDefinitionScanner(this);
	}

因为AnnotationConfigApplicationContext继承了GenericApplicationContext。所以在执行AnnotationConfigApplicationContext的构造函数的时候时候首先执行了

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值