spring ioc原理

1.当容器启动的时,spring会通过BeanDefinationReader读取咱们通过xml或者注解配置的bean,将其转换成对应的BeanDefination加载到内存,这个BeanDefination中蕴含了bean元信息,是否式单例。
2.当生成了BeanDefination之后,spring就将其注册到BeanDefinationRegistry,BeanDefinationRegistry是一个Map,key是Bean定义的id,value是对应的BeanDefination。
3.当所有的BeanDefination注册完后,spring给咱们提供了一个扩大点,能够实现BeanFactoryPostProcessor接口重写其中的办法,能够操作批改BeanDefination中bean的元信息。
4.容器启动后会扫描这个map中的BeanDefination,并应用反射的形式实例化bean。
5.对于实例化后的bean,spring会应用BeanWrapper中封装的反射相干的API来对bean填充属性,对于根本数据类型,依照咱们的配置设置,对于援用类型,spring会把曾经创立好的对象放入一个Map中,此时spring会查看依赖的对象是否曾经在map里了,如果有间接注入,如果没有spring会暂停该对象的实例化,转而先去实例化依赖的对象,完预先再回头来实现该对象的实例化。
6.在填充完属性后,spring提供了一系列的aware接口,能够实现对容器自身一些属性的拜访。
7.而后spring又提供了两个扩大点,BeanPostProcessor这里提供了一个before和after办法,来对bean进行加强,AOP的动静代理就是在after当中实现的。至此咱们对象的初始化实现。

spring的三级缓存问题

第一级缓存放的实例化初始化过成熟的bean
第二级缓存和第三级缓存寄存的时实例化但未注入过的bean
当A和B循环依赖的时候,先实例化A,注入时发现依赖B 就先把A扔到第三级缓存,而后先注入

spring AOP原理

aop是ioc流程中的一个扩大点,在bean的创立过程中有一个步骤,也就是BeanPostProcessor提供了before和after两个办法在初始化对象办法前后,能够对bean进行加强,aop就是在after办法中实现的。会通过JDK动静代理或者CGLIB的形式创立Bean的代理类,后续对bean中办法调用的时候,理论调用的是代理类加强过的办法。
JDK动静代理:是应用了拦截器的形式,在调用办法的时候先解决拦截器中的逻辑
CGLIB:通过批改代理对象的class文件的字节码实现。

spring的事务

spring的事务,它实现上其实还是用AOP的原理,比如说办法上增加了@Transaction注解后,spring会基于这个类生成一个代理对象,代理对象对办法做了加强,如果有事务处理,那么会先把事务的主动提交给敞开,而后执行业务逻辑,办法执行完没有异样,事务间接提交,如果有异样,间接回滚。

springBoot的工作原理

主动拆卸,就是主动把第三方的组件的bean装载到IOC容器中,不须要咱们在写相干的配置。
1.引入各个组件的starter,组件中蕴含了一个@Configuration配置类,在这个配置类中,有@Bean注解申明了组件须要拆卸到IOC容器外面的Bean对象。
2.这个配置类是放在第三方jar包中的,而后基于约定优于配置的理念把这个配置类的全门路放在META-INF/spring.factories文件中,这样springBoot就能够通过SpringFactoriesLoader晓得第三方jar包中配置类的地位。
3.在启动类的@SpringBootApplication这个复合注解上面,有一个@EnableAutoConfiguration这个注解就是来实现主动拆卸的,在这个注解上面的@Import注解导入了AutoConfigurationImportSelector这个类,这个类继承了了ImportSelector,外面的selectImports会读取spring.factories中配置类,实现对这些配置类的动静加载,从而实现主动拆卸。