spring boot

1.导入xml配置文件,可以用@ImportResource注解
2.可以在@SpringBootApplication,@EnableAutoConfiguration注解中排除自动配置类

@SpringBootApplication(exclude={DataSourceAutoConfiguration.class})
@SpringBootApplication(excludeName={类的全路径名})

devtools

添加maven依赖

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-devtools</artifactId>
        <optional>true</optional>
    </dependency>
</dependencies>

devtools依赖hook,SpringApplication.setRegisterShutdownHook(false)会导致出现问题
restart通过销毁旧的类加载器,创建新的类加载器实现
reload通过
spring.devtools.restart.log-condition-evaluation-delta 开关restart执行时打印的日志

启动流程

创建SpringApplication实例

		/**
		检测应用类型,通过是否成功加载某些类来确定
		**/
		this.webApplicationType = WebApplicationType.deduceFromClasspath();
		/**
		在META-INF/spring.factories中查找org.springframework.boot.Bootstrapper的实现类,并
		循环调用initialize方法

		查找并创建org.springframework.boot.BootstrapRegistryInitializer实现类
		**/

		this.bootstrapRegistryInitializers = getBootstrapRegistryInitializersFromSpringFactories();
		/**
		查找并创建org.springframework.context.ApplicationContextInitializer实现类
		
		**/
		setInitializers((Collection) getSpringFactoriesInstances(ApplicationContextInitializer.class));
		this.initializers = new ArrayList<>(initializers);
		/**
		查找并创建org.springframework.context.ApplicationListener实现类
		**/
		setListeners((Collection) getSpringFactoriesInstances(ApplicationListener.class));
		this.listeners = new ArrayList<>(listeners);
		//通过遍历堆栈方法名,如果methodName是main,则该类作为mainClass
		this.mainApplicationClass = deduceMainApplicationClass();

SpringApplication.run()

		//遍历调用this.bootstrapRegistryInitializers::initialize方法
		DefaultBootstrapContext bootstrapContext = createBootstrapContext();
		ConfigurableApplicationContext context = null;
		configureHeadlessProperty();
		/**
		查询META-INF/spring.factories文件下的org.springframework.boot.SpringApplicationRunListener实现类
		创建EventPublishingRunListener类实例,并存入SpringApplicationRunListeners 
		**/
		SpringApplicationRunListeners listeners = getRunListeners(args);
		/**
		发布ApplicationStartingEvent事件,通知监听器
		EnvironmentPostProcessorApplicationListener
		AnsiOutputApplicationListener
		LoggingApplicationListener
		BackgroundPreinitializer	
		DelegatingApplicationListener
		FileEncodingApplicationListener
		**/
		listeners.starting(bootstrapContext, this.mainApplicationClass);
		//应用命令行参数设置
		ApplicationArguments applicationArguments = new DefaultApplicationArguments(args);
		/**
		根据应用类型创建environment
		(StandardServletEnvironment、StandardReactiveWebEnvironment、StandardEnvironment)
		配置PropertySources,配置Profiles
		发布ApplicationEnvironmentPreparedEvent,通知监听器
		EnvironmentPostProcessorApplicationListener
		AnsiOutputApplicationListener
		LoggingApplicationListener
		BackgroundPreinitializer	
		DelegatingApplicationListener
		FileEncodingApplicationListener
		**/
		ConfigurableEnvironment environment = prepareEnvironment(listeners, bootstrapContext, applicationArguments);
		//设置spring.beaninfo.ignore系统参数=true
		configureIgnoreBeanInfo(environment);
		//根据webApplicationType创建context
		context = createApplicationContext();
		
		context.setApplicationStartup(this.applicationStartup);
		prepareContext(bootstrapContext, context, environment, listeners, applicationArguments, printedBanner);
		refreshContext(context);
		afterRefresh(context, applicationArguments);
		listeners.started(context);
		callRunners(context, applicationArguments);
		listeners.running(context);
		return context;
	}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值