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 控制先后顺序。 缺: 后面章节