Spring的原理

33 阅读3分钟

Spring

什么是Spring

Spring框架是一个开源的应用程序框架有两个重要的变成思想

控制反转(ioc)和面向切面编程(aop)

什么是IOC

IOC是JAVA是一种设计思想叫控制反转

控制对象的创建

反转对象的创建和管理

他的底层是工厂模式:工厂模式是指通过工厂去获取对象,反转创建对象被spring管理的对象统一称之为bean,spring最大的作用也就是管理bean

其中DI

是指依赖注入也是IOC的一种具体表现,在创建对象的同时为其属性进行赋值

注入方式

set注入在xml中使用property属性

构造器注入 在xml中使用constructor-arg属性

工厂注入{配置文件注入方式}有实例工厂和静态工厂

自动注入{配置文件方式注入} 有bytype根据类型注入和byname根据beam的名称进行注入

注解注入

@Autowired 是按类型进行注入,多个属性名作为beanname的匹配 @Resource 是按bean的名称进行注入

相关的注解

@Component, @Repository, @Service, @Controller, @Value @Autowired. @Scope @Bean @RestController, @Configuartion, @Qulaflier. @Import. @CompentScan. ​

什么是AOP

AOP也是一种java的设计思想,叫面向切面变成是oop的思想的递进他的底层是动态代理

动态代理

动态代理有两种 JDK的动态代理要求是必须有接口,在项目中的业务层就是基于这种代理实现的,里面声明了事务底层就是基于AOP和运行是异常实现的 CGLIB动态代理代理对象必须是子类,类不能被final进行修饰

在项目中异常处理器和过滤器,拦截器都使用了AOP思想

解决没有AOP的循环依赖问题
  1. 实例化A对象之后,将A对象放入 二级缓存中
  2. 在填充A的属性阶段需要去填充B对象,而此时B对象还没有创建,所以这里为了完成A的填充就必须要先去创建B对象
  3. 、创建B对象的过程中,实例化B对象之后,将B对象放入二级缓存中
  4. 执行到B对象填充属性阶段,又会需要去获取A对象,而此时一级缓存中没有A,因为A还没有创建完成,但是我们继续从二级缓存中拿到尚未创建完毕的A的引用赋值给a字段。这样B对象其实就已经创建完整了,尽管B.a对象是一个还未创建完成的对象
  5. 此时将B放入一级缓存,并且从二级缓存中删除
  6. 这时候B创建完成,A继续执行b的属性填充可以从一级缓存拿到B对象,这样A也完成了创建
  7. 此时将A对象放入一级缓存,并从二级缓存中删除