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