spring是一个框架、也是一个容器、也是一个生态。
Spring是一个开源框架是一个全家桶(基石),是为了简化企业开发而生的,是的开发变得更加优雅和简洁。有衍生出产品:springBoot、springSecurity、jpb等。他们的基础都是spring的ioc、aop等。IOC提供了依赖注入的容器,AOP解决了面向切面编程,然后再此两者的基础上实现了其他延伸产品的高阶功能。
Spring是一个IOC和AOP的容器框架。IOC控制反转,AOP面向切面编程。容器包含并管理应用对象的生命周期。简单说:spring就是全家桶,而对象就是鸡腿
多个事务方法相互调用时,事务如何在这些方法之间进行传播,spring中提供了7中不同的传播特性,来保证事务的正常执行:
在使用Spring框架的时候,可以有两种事务的实现方式,一种是编程式事务,有用户自己通过代码来控制事务的处理逻辑,还存一种是声明式事务,通过@Transactional
注解来实现。
其实事务的操作本来应该是由数据库来进行控制,但是为了方便用户进行业务逻辑的操作,spring对事务功能进行了扩展实现,一般我们很少会用编程式事务,更多的是通过添加@Transactional
注解来进行实现,当添加此注解之后事务的自动功能就会关闭,有spring框架来帮助进行控制。
其实事务操作是AOP的一个核心体现,当一个方法添加@Transactional注解之后,spring会基于这个类生成个代理对象,会将这个代理对象作为bean,当使用这个代理对象的方法的时候,如果有事务处理,那么会先把事务的自动提交给关系,然后去执行具体的业务逻辑,如果执行逻辑没有出现异常,那么代理逻辑就会直接提交如果出现任何异常情况,那么直接进行回滚操作,当然用户可以控制对哪些异常进行回滚操作。
IOC(Inversion of Control),意思是控制反转,不是什么技术,而是一种设计思想,IOC意味着将你设计好的对象交给容器控制,而不是传统的在你的对象内部直接控制。在传统的程序设计中,我们直接在对象内部通过new进行对象创建,是程序主动去创建依赖对象,而IOC是有专门的容器来进行对象的创建,即IOC容器来控制对象的创建。在传统的应用程序中,我们是在对象中主动控制去直接获取依赖对象,这个是正转,反转是由容器来帮忙创建及注入依赖对象,在这个过程中由容器帮我们查找级注入依赖对象,对象只是被动的接受依赖对象
1、先准备一个基本的容器对象,包含一些map结构的集合,用来方便后续过程中存储具体的对象
2、进行配置文件的读取工作或者注解的解析工作,将需要创建的bean对象都封装成BeanDefinition对象存储在容器中
3、容器将封装好的BeanDefinition对象通过反射的方式进行实例化,完成对象的实例化工作
4、进行对象的初始化操作,也就是给类中的对应属性值就行设置,也就是进行依赖注入,完成整个对象的创建,变成一个完整的bean对象,存储在容器的某个map结构中
5、通过容器对象来获取对象,进行对象的获取和逻辑处理工作
6、提供销毁操作,当对象不用或者容器关闭的时候,将无用的对象进行销毁
主要解决web开发的问题,是基于servlet的一个mvc框架,通过xml配置统一开发前端视图和后端逻辑
当发起请求时被前置的控制器拦截到请求,根据请求参数生成代理请求,找到请求对应的实际控制器,控制器处理请求,创建数据模型,访问数据库,将模型响应给中心控制器,控制器使用模型与视图渲染视图结果,将结果返回给中心控制器,再将结果返回给请求者
HandlerMappingHandlerMapping
根据请求ur查找Handler.spring的配置非常复杂,各种xml、javaConfig、servlet处理起来比较繁琐,为了简化开发者的使用,从而创造性的推出了springBoot框架默认优化配置,简化了springMvc的配置流程;区域与springMvc的是,springBoot专注于单体微服务接口开发和前端解耦。虽然springboot也可以做成spirngmvc前后台一起开发,但是这个不符springboot框架的初衷
prepareContext
(完成自动装配过程)prepareContext
方法中查找load方法,一层层想内点击,最终找到load方法完成该功能,如:获取bean对象定义的加载器@ComponentScan
;如果是字符串类型直接加载)isComponent
方法判断启动类中是否包含@Component注解,但是会神奇的发现我们的启动类中并没有该注解,继续更进发现MergedAnnotations
类传入了一个参数Searchstrategy.TYPE_HIERARCHY
,会查找继承关系中是否包含这注解,@SpringBootApplication
–>@SpringBootConfiguration
–>@Configuration
–>@Component
,当找到@Component注解之后,会把该对象注册到AnnotatedBeanDefinitionReader
对象中(该步骤中是启动对象注入、自动装配还没开始)refresh()
invokeBeanFactoryPostProcessors
方法中完成bean的实例化和执行invokeBeanFactoryPostProcessors
具体执行方法
上一篇:超全新晋“网红城市”打卡攻略!速度收藏 网红城市地标地名打卡拍照 武汉周边新晋7大网红打卡地
下一篇:假期首日铁路迎客流出行高峰 北京南站有望创单日发送旅客历史新高 铁路迎来春运返程客流高峰 全国铁路旅客发送量逐渐回升