spring总结
2024-07-06 00:52:35 0 举报
Spring全流程解析
作者其他创作
大纲/内容
无
xml
执行初始化方法
BeanFactory
BeanPostProcessor
postProcessBeforeInitializationpostProcessAfterInitialization
Class<$Proxy0>对象
invokeAwareMethods
1.同一个容器中,能否出现同名的不同对象?不行2.在标椎的bean生命周期中,要先创建出原始对象,然后如果有代理对象,那么在属性引用的时候使用的原始对象还是代理对象。 答:按照正常的逻辑要萱蕚代理对象,但是程序是写死的,如果原始对象和代理对象同时存在的时候程序怎么回到选择那个对象。3.如果原始对象和代理对象同时存在,要怎么处理?答:覆盖4.我什么必须要使用三级缓存才能解决这个问题?为什么lambda表达式的方式可以解决?5.如何解决
BeanFactoryProcess
1.在对空间中申请内存,通过反射的方式创建出对象,此时的队形的属性是默认值2.JVM对象的创建过程:类加载、检查(校验语法语义等)、准备(分配空间以及初始化类变量)、解析(符号引用转化为直接引用)、初始化(调用构造方法)3.因为在对空间分配内存,所以在单例的实力中存在安全性。JVM解决的方法:指针碰撞(CAS)+TLAB4..单例的如何保证SPRING值生成一个对象:双重检测所
BeanDefinition
$Proxy0(InvocationHandle h)
AbstractAutoProxyCreator
+ operation1(params):returnType- operation2(params)- operation3()
MethodInterceptor.inceptor方法
有
MethodInterceptor.inceptor->invokeSuper->init()
set
1.如何基于CGLIB实现动态代理答:a.写一个拦截器,invoke方法中实现方法增强 b.增强器指定加强类的业务父类并设置回调(上面的拦截器) c.生成代理对象并调用2.CGLIB底层实现原理源码解读3.为什么CGLIB效率会比Jdk动态代理效率高 答:因为CGlib使用 4.CGLIB的FastClass机制实现的原理
执行方法
检查aware
产生循环依赖问题
给B对象赋值A
BeanFactoryProcesss是BeanDefinitionRegittoryPostProcess的超类
增强器调用create方法生成代理类。
属性赋值(自定义属性)
constructor.newInstance(InvocationHandler h)
给A对象赋值B
直接赋值
创建A对象
PropertiesBeanDefinitionReader
实例化
执行InitMethod方法
属性赋值
JDK动态代理
AOP实现类
getBean
invokeBeanFactoryPostProcessors
BeanDefinitionReader
采用ASM技术。并生成代理类(继承自目标类实现factory)和目标类的fastClass.
反射
BeanFactoryPostProcessor
doCreateBean
执行前置处理方法
GroovyBeanDefinitionReader
createBeanInstance
注解
容器是否有B对象实例
$Proxy0对象
BeanDefinitionRegistryPostProcess
AOP失效问题:1.私有方法失效2.static3.final4.内部类自调用5.
实例化A对象b=null
初始化过程
容器对象赋值
userService接口
doGetBean
properties
createBean
是否实现InitalizingBean接口
abstractBeanDefinitionRader
invokeInitMethods
后置处理方法
XmlBeanDefinitionReader
创建B对象
代理实现方式1.JDK实现2.CGLib实现
实例化B对象a=null
使用index找到对应的方法
AbstractApplicationContext
populateBean
refresh
容器是否有A对象实例
public final class $Proxy0 extends Proxy implments UserService{ public final void add(){ super.h.invoke();}}
CGLIb
代理类的fastClass Invoke方法
执行afterPropertiesSet方法
动态代理问题
收藏
0 条评论
下一页