Spring 总结

1.什么是Spring,Spring代理什么好处

    Spring是一套技术框架集合。Spring核心思想容器化技术(IOC)和以来注入(DI)。同时提供了JAVA中常用开发业务逻辑的中间抽象。让开发者不需要写更多的重复代码和对于使用场景进行抽象采用观察者模型,采用抽象接口,便于业务开发过程中可以关注与业务代码。Spring Cloud组件给微服务开发业务场景提供必要中间件,给微服务开发提供方便。Spring 开发给业务开发带来很多方便。

2.Spring的Bean注入方式

   Spring的容器管理Bean采用单例模式,Spring的Bean的注入方式可以通过构造函数,属性,方法注入的形式。Spring注入可以用XML,注解,Spel表达式的方式实现。Spring的Bena如果采用构造函数方式注入,如果逻辑设计不合理,可能会出现循环依赖的导致,无法确定创建的先后顺序。所以在代码设计的时候,避免产生循环依赖。Spring针对Bean的循环依赖采用三级缓存的方式解决循环依赖。首先是简单不存在循环依赖的对象的创建,存在属性循环依赖的对象需要提前创建实例,然后存在依赖按照属性的注入的方式进行注入。然后针对需要继续初始化的方法,调用初始化方法。@Postin修饰的方法。

3.Spring Boot 框架源码

    Spring程序启动,进行Web容器的创建。首先架子判断ClassPath中是否中有WebFlux类库,如果包含则启动Reactive(基于事件响应式编程模型),然后判断是否包含Servelt类的引用,设置SERVLET模式。如果都没有则模式是No的模式。根据当前类中加载  SpringFactoriesLoader加载Spring的SPI机制约定的关于容器环境设置,环境创建过程中的监听类的实现(比如环境初始化ApplicationContextInitializer,ApplicationLinster 监听SpringBoot的事件)。进行环境初始化的监听,创建 SpringApplicationRunLinstener主要是更加具体的环境启动监听。创建对应的程序上下文 。获取异常处理类。开始进行上下文的准备,分为提前预处理调用,处理过程调用,处理完成,(对于Bean进行扫描),刷新上下文(扫描注解和@importResource导入的XMl中定义的类),调用ApplicationContext的刷新操作。

    SpringBoot 可以在SpringBean程序启动之前自定义BeannameGenerator生成器,SpringBoot启动时候支持懒加载处理。

    Spring推断主类的方式是通过抛出异常,检测的main名称方式,推测主类主要是为了进行包的扫描加载注解类。

    SpringBoot可以在程序运行启动之前设置默认的属性配置操作。

    SpringBoot可以在程序启动的时候指定Source需要扫描的包和扫描的类信息。

     SpringBoot可以在运行期间动态注入。

    SpringBoot支持Bean的按照条件注入。

4.Spring 拦截器

    

 

关于Spring项目中bootStrap.properties文件,只有在Spring Cloud 项目中才会有,一些配置文件需要提前初始化

关于spring.factory和spring-autoconfigure-metadata.properties spring的factory文件配置需要自动注入一些,元数据中保存注入需要的条件,因为一些注册条件是在类中声明,但是一些时候

项目中没有引入特定类,所以有元数据提前声明,进行过滤掉。因为Spring.facory的文件中初始化的太多

 

Spring Boot 项目加载流程中重要的类:

 

负责加载Bean的定义:BeanDefinitionLoader,其中包括 AnnotatedBeanDefinitionReader(注解的方式定义的Bean),XmlBeanDefinitionReader(通过XML的方式定义的Bean),BeanDefinitionReader(通过Groovy方式定义的Bean对象)。
同时包含包的扫描,资源的加载。
ConfigurationClassBeanDefinitionReader:可配置Bean的定义获取
loadBeanDefinitionsFromImportedResources:获取@importREsource注解中定义的XML文件的阅读

 

Spring中拦截器的使用:

https://www.cnblogs.com/onlymate/p/9563443.html

 关于Spring中循环依赖问题:https://segmentfault.com/a/1190000023712597

 

spring项目如何处理xml文件的解析:

META-INF/spring.handlers

NamespaceHandlerSupport

 

ImportResource 中可以自定义资源阅读解析方式

Spring的配置中心:
Apollo配置中心: https://ctripcorp.github.io/apollo/#/zh/README

SpringBoot 使用远程事件:
https://www.jianshu.com/p/093ed9816993
SpringBoot 事件监听机制:
https://blog.wangqi.love/articles/Java/Spring%20Event%E4%BA%8B%E4%BB%B6%E9%80%9A%E7%9F%A5%E6%9C%BA%E5%88%B6.html

 

posted @ 2021-01-23 11:13  持之  阅读(87)  评论(0编辑  收藏  举报