spring总结

一、详细了解springboot自动配置
1.SpringBoot启动时会扫描项目所依赖的JAR包,寻找包含spring.factories文件的JAR包。
2.根据spring.factories配置加载EnableAutoConfiguration 其中给容器中自动配置添加组件的时候,会从propeties类中获取配置文件中指定这些属性的值。比如RedisAutoConfiguration:⾃动配置类给容器中添加组件。RedisProperties:封装配置⽂件中相关属性。
3.根据@Conditional注解的条件,进行自动配置并将Bean注入Spring容器
 springboot所有自动配置都是在启动的时候扫描并加载。spring.factories所有的自动配置类都在这里面,但是不一定 生效,只要导入了对应的start,就有对应的启动器,有了启动器,我们自动配置就会生效,然后就配置成功
二、 springboot启动流程
(1)springApplication
1推断应用的类型是普通的项目还是Web项目
2查找并加载所有可用初始化器,设置到linitalizers属性中
3找出所有的应用程序监听器,设置到listeners属性中
4推断并设置main方法的定义类,找到运行的主类
(2)run
  • 创建了应用的监听器 SpringApplicationRunListeners并开始监听
  • 加载SpringBoot配置环境( ConfigurableEnvironment),如果是通过web容器发布,会加载 StandardEnvironment,其最终也是继承了 ConfigurableEnvironment
  • 配置环境( Environment)加入到监听器对象中( SpringApplicationRunListeners)
  • 创建run方法的返回对象: ConfigurableApplicationContext(应用配置上下文)
  • 回到run方法内, prepareContext方法将 listenersenvironmentapplicationArgumentsbanner等重要组件与上下文对象关联
  • 接下来的 refreshContext(context)方法(初始化方法如下)将是实现 spring-boot-starter-*(mybatis、redis等)自动化配置的关键,包括 spring.factories的加载,bean的实例化等核心工作。
三、yml和properties的区别
1、properties优先级比yml高
2、语法不同
3、yml支持多种语言、通用性更好
四、(boot死诧普)bootstap.yml的作用
bootstrap.yam是由spring-cloud-content包加载
bootstrap.yml在Springboot中默认是不支持的,需要在Spring Cloud环境中才支持。
作用是在Springboot项目启动之前启动的一个父容器,该父容器可以在Springboot容器启动之前完成一些加载初始化的操作,比如加载配置中心中得信息
属性覆盖问题
初始化的时候,Bootstrap Context负责从外部元件加载配置属性并解析配置。这两个上下文共享一个从外部获取的Environment。Bootstrap属性有高优先级,他们不会被本地配置覆盖
五、spring事务的传播机制
一共有7种
1、required(默认),如果当前有事务,使用当前事务,没有事务,则开启一个新事务
2、requires_new:如果当前有事务,挂起当前事务,开启一个新事务执行
3、mandatory:必须在事务中运行,如果当前事务不存在,则会抛出一个异常
4、supports:当前有事务,则用当前事务,没有事务则按照非事务方式执行
5、not_supported:挂起任何存在的事务,按照非事务执行
6、never:非事务执行,如果存在事务,则抛出异常
7、nested:当前有事务,则嵌套一个事务在当前事务中执行
六、spring框架中用了哪些设计模式,以及在什么地方用到的
1、单例模式:spring配置单例Bean
2、适配器模式:spring MVC用到了适配器模式适配Controller
3、代理模式:AOP是通过代理模式实现的
4、包装器模式:我们的项目需要链接多个数据库。这种模式我们跟据客户的需求能够动态切换数据源
5原型模式:spring创建prototype Bean用到了原型模式
6、责任链模式:AOP中的拦截器链
七、pom、jar、war之间有什么区别
pom:用在多模块工程,用来父子之前模块的互相依赖
jar:将会打包成jar包使用
war:打包成war包,发布在服务器(如tomcat)上
八、Bean的三级缓存及使用
singletonObject一级缓存:存储初始化完成的Bean
earlySingletonObjects二级缓存:未初始化未填充属性提前暴露的Bean
singletonFactories三级缓存:Bean工厂
如果没有AOP的话确实可以两级缓存就可以解决循环依赖的问题,如果加上AOP,两级缓存是无法解决的,不可能每次执行singleFactory.getObject()方法都给我产生一个新的代理对象,所以还要借助另外一个缓存来保存产生的代理对象
十、Spring中@lavy注解的作用
@Lazy注解作用在类上,通常与@Component注解配合使用
@Lazy注释在方法上,通常与@Bean注解配合使用
作用:
    可以使bean延迟加载
十一、FactoryBean的作用,什么时候使用FactoryBean
作用:
    可以自定义Bean的创建过程,用来给我们实例化、或者动态的诸 如一些比较复杂的Bean
应用场景:
    需要搭配其他接口协作。依赖于spring来生成对象
十二、Bean的生命周期
1、实例化bean(为bean分配内存空间)
2、设置属性(Bean注入和装配)
3、Bean初始化流程
执行BeanPostProcessor初始化前置方法
执行@PostConstruct初始化方法
执行自己指定的init-method方法
执行BeanPostProcessor初始化后置方法
4、使用Bean
5、销毁Bean
十三、跨域伪造请求(CSRF)的理解和总结
攻击者盗用了用户的身份,发送恶意请求
解决:
定义一个过滤器,对页面传递过来的sessionid和实际的sessionid对比,不相同则拦截
每个请求都带上一个由服务器生成的随机参数。然后在服务器端和对该参数,如果和下发的随机数不同,则可以认为有人在伪造请求。因为攻击者无法知道他本次攻击的http请求需要带什么样的随机数才是有效的。 
十四、AOP的理解
AOP是基于动态代理的,AOP能够将那些与业务无关,却在多个业务模块使用的逻辑(例日志管理、多数据源切换、事务处理)等封装起来、可以减少系统的重复代码,降低模块间的耦合度,有利于扩展性和可维护性
Aop代理方式
JDK动态接口代理
CGLib动态代理
十五、Spring如何获取配置文件的配置
@configurationproperties  注释在方法上获取
@Value 使用¥获取
environment的getpropety获取
十六、springboot启动时间慢如何排查优化
两个思路:开启debug日志paichaspringboot服务的启动流程,排查Bean的初始化耗时
可能导致慢的原因
项目中使用的配置太多
springboot的自动配置 装配的无用配置太多
项目精简程度不够 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值