springboot 底层点的知识

不断提高代码质量
    从大的方面来讲,可以从这几个方面,不断提高自己的编程能力:
		1、编码之前需要做一定的设计,主要考虑:耦合度,拓展性,复用度
		2、熟悉类库,熟悉API,避免自己造轮子
		3、阅读优秀源码并加以实践
		4、参考一些已有的最佳实践,代码片段,但是避免复制粘贴
		5、多考虑一些细节、边界、异常场景
		6、保持代码的整洁,包括类、方法、变量的命名
		7、在I/O操作多考虑性能问题,重要信息多考虑安全问题

springboot 重难点?
	1、零配置
	2、starter插件式解耦
	

参考:
	https://blog.csdn.net/woshilijiuyi/article/details/82219585
	


what?

how?

why?
	一、启动流程
		1、入口:SpringApplication.run();
		2、初始化回调接口:ApplicationContextInitializer
		   监听器接口:ApplicationListener
		3、springboot扩展方式:SPI(Service Provider Interface)(参考:https://www.jianshu.com/p/0d196ad23915)
			3.1、目录为:META-INF/spring.factories
			3.2、配置方式:接口名称=实现类
			3.3、根据“接口名称”获取对应的实现类,然后装载到内存中。
	
		4、启动流程步骤
			4.1、获取并启动监听器
			4.2、构造容器环境
			4.3、创建容器
			4.4、实例化springBootExceptionReporter,springboot错我报告。
			4.5、准备容器
			4.6、刷新容器
			4.7、刷新容器后的扩展接口
			
	二、自动化配置流程(重点)
		1、入口:@SpringBootApplication
		2、自动装配:spring.factories 里面的:org.springframework.boot.autoconfigure.EnableAutoConfiguration
	
	三、环境(Environment)
		1、Environment是 spring 为运行环境提供的高度抽象接口,项目运行中的所有相关配置都基于此接口。springboot对此接口做了扩展。spring Cloud的配置文件,
		在springboot解析逻辑之前,添加了bootstrap配置。
		2、加载环境配置
		3、触发环境监听器,加载项目在的配置文件。
			3.1、判断是否指定了:profile
			3.2、加载application.yml/application.properties
			3.3、注意配置文件的位置,以及生效的优先级。

	四、自定义AutoConfiguration|自定义starter
		1、自定义starter
			1.1、创建一个项目
			1.2、配置类添加注解:
				A:@Configuration,@ConditionalOnproperty
				B:类名:CqcStarterAutoConfiguration
				C:项目路径下添加文件:resources/META-INF/spring.factories
				D:内容为:org.springframework.boot.autoconfigure.EnableAutoConfiguration=CqcStarterAutoConfiguration类的全限定名。
			1.3、在需要的项目中,dependency 对应的maven坐标。
		2、判定一个jar是否需要引入springboot的依据是:
			1、@Conditional
			2、@ConditionalOnProperty

	五、监听器,自定义ApplicationListener
		1、SimpleApplicationListener implements GenericApplicationListener,ApplicationListener<ApplicationEvent>
		2、重写:onApplicationEvent 方法。

	六、条件注解:@ConditionalOnBean
		1、spring ioc 的过程中,优先解析:@Component,@Service,@Controller注解的类,再解析@Configuration的类。
		2、@ConditionalOnClass
		3、@AutoConfigureBefore,@AutoConfigureAfter,@AutoConfigureOrder 控制先后顺序。
	缺:
		后面章节
		
	

  

原文地址:https://www.cnblogs.com/chen--biao/p/12890440.html