周末学习总结,讲讲spring流程,欢迎指正。
1.创建spring容器,包扫描,xml配置和注解,得到bean定义。注册到bean定义map
2.注册,执行bean工厂回调方法。此时可以扩展拿到bean定义,进行修改。
3.实例化对象,通过构造方法,反射。
4.能提前暴露的对象,加入bean工厂map
5.属性填充,处理循环依赖。
6.初始化对象。包含bean回调前置方法,init方法,bean回调后置方法。
7.初始化完成放入单例池。
其中Aop是在bean回调后置方法,把原来的bean替换成了代理对象。此时存在单例池的,就是一个代理对象。
Aop用到了jdk动态代理Proxy和cglib 代码生成依赖。
jdk动态代理,只能代理接口。
cglib底层是ASM框架,原理是通过创建一个类继承原有的类,再扩展被代理方法。