IOC容器运行机制
首先从XML或者注解中将所有需要加载到容器中的类的信息存放到BeanDefintion里面
然后通过BeanFactory工厂模式创建FactoryBean
通过反射将BeanDefintion的类进行实例化
有需要对类的属性进行依赖注入
在依赖注入的时候需要解决循环依赖问题
在bean创建完毕后,会将bean放入singletionObject容器虽然可以解决循环依赖的问题但是会出现并发问题,其他线程可能在bean还没注入的时候获取bean对象
引入二级缓存来解决并发问题 eariySingletionObjects进行双重检测锁解决
最终通过三级缓存singletonFactories 来进行解决AOP依赖问题
然后通过getBean将创建好的对象返回
bean的生命周期
单例bean:singeton
随着工厂启动创建->构造方法->set方法(注入值)->int方法(初始化)->构建完成->随着工厂关闭销毁
多例bean:prototype
随着工厂启动创建->构造方法->set方法(注入值)->int方法(初始化)->构建完成->JVM垃圾回收器回收
AOP实现原理
Spring中已经存在了AOP但由于功能一般还需要引入Aspectg完成其他的一些功能
Spring中的AOP属于运行时增强,Aspectg属于编译时增强
Spring的AOP基于代理(Proxying ),Aspectg基于字节码操作(Bytecode Manipulation )
代理模式:是AOP的实现模式
代理模式主要分为静态代理和动态代理
Spring中AOP的实现机制
SpringAOP是由接入BeanPostProcessor后置处理器开始的
BeanPostProcessor可以监听bean的生命周期事件
Bean的生命周期
构建->注入元素,满足依赖->后处理器前置过程->初始化->后处理器后置过程->返回->销毁