五、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代理的区别