五、Spring相关

  • Spring AOP的实现原理和场景?
  • Spring bean的作用域和生命周期;
  • Spring Boot比Spring做了哪些改进? Spring 5比Spring4做了哪些改进;
  • 如何自定义一个Spring Boot Starter?
  • Spring IOC是什么?优点是什么?
  • SpringMVC、动态代理、反射、AOP原理、事务隔离级别;

Spring和Springboot差别

jianshu.com/p/ffe5ebe17c3a

Springboot怎么处理接口请求的

收到请求后,会遍历一个列表,找到满足url的handler。然后是参数解析,会有很多种参数,所以会遍历找出来一个可以解析的解析器进行解析。最后处理返回值并返回。

Bean的生命周期

主要有四个,实例化Instantiation,属性赋值Populate,初始化Initialization,销毁Destruction。

在实例化前后有一个接口InstantiationAwareBeanPostProcessor,分别对应于实例化之前postProcessBeforeInstantiation方法和postProcessAfterInstantiation方法;之后是属性赋值,然后是初始化,初始化前后也有一个接口BeanPostProcessor,前后各有两个方法和之前的两个名字一样。最后销毁。https://www.jianshu.com/p/1dec08d290c1。
Bean生命周期详细版:实例化,填充属性,name,factory,applicationContext,before-init,init,after-init,调用,destory。https://www.zhihu.com/question/38597960。

factoryBean和beanFactory

beanFactory是IOC容器的接口,factoryBean是自定义实例化bean的一个工厂接口,给bean加上了一个简单工厂和装饰模式。

Aop

如果我们想在每个方法前面都加上一个参数校验,需要在方法中编写代码,但是这个代码和业务代码没有关系,所以可以把他们抽象出来,作为aop切面,可以注解实现切面。

Bean的作用域

五种:singleton:全局只有一个。prototype:每次调用bean,都是new。request:请求处理时创建,请求完成后销毁。session:所有http请求共享同一个请求bean。globalSession:全局session,portlet环境才生效,否则相当于session。

Spring的bean循环依赖怎么解决

创建时会加入到三级缓存,这个时候还没有赋值,循环依赖的对象直接从三级缓存里面找就可以。构造函数的循环依赖怎么办,用@lazy注解,注入代理对象,当使用这个对象的时候再创建真实的对象。

为什么是三级缓存不是二级缓存

二级缓存可以解决aop动态代理的情况,代理对象会被放到二级缓存,解决代理对象的循环依赖。

jdk代理和cglib代理的区别