什么是循环依赖,Spring是如何处理循环依赖的? (3级缓存机制,Bean加载过程,Spring解决的是对象循环依赖,无法解决构造器循环依赖直接报错)
Bean的生命周期?
答:class —> BeanDefinition—->对象(代理Proxy.newInstance) —> 依赖注入(BeanFactory) —> BeanNameAware —>初始化—> aop—>bean对象 —>对象池中进行管理
BeanDefinition 注册阶段 — registerBeanDefinition
BeanDefinition 合并阶段 — getMergedBeanDefinition
Bean 实例化前阶段 — resolveBeforeInstantiation
Bean 实例化阶段 — createBeanInstance
Bean 实例化后阶段 —populateBean
Bean 属性赋值前阶段 — populateBean
Bean Aware 接口回调阶段 — initializeBean
Bean 初始化前阶段 — initializeBean
Bean 初始化阶段 — initializeBean
Bean 初始化后阶段 — initializeBean
Bean 初始化完成阶段 — preInstantiateSingletons
Bean 销毁前阶段 — destroyBean
Bean 销毁阶段 — destroyBean
SpringMVC处理请求流程
springmvc 参数解析绑定原理
spring ioc和 aop原理 ioc 反射 工厂模式 aop 动态代理
jdk动态代理和cglib动态代理
java动态代理是利用反射机制生成一个实现代理接口的匿名类,在调用具体方法前调用InvokeHandler来处理。
cglib动态代理是利用asm开源包,对代理对象类的class文件加载进来,通过修改其字节码生成子类来处理。
JDK 动态代理是基于接口的,代理生成的对象只能赋值给接口变量。
CGLIB 是通过生成子类来实现的,代理对象无论是赋值给接口还是实现类这两者都是代理对象的父类。
Spring内建的Bean作用域有几种 ?
singleton — 默认单例 ☆
prototype — 原型
request — Web中使用
session
application
websocket