spring总结

Spring框架的好处

  • 轻量:基本的版本大约是2M
  • IOC(控制反转):Spring通过控制反转实现了松散耦合,对象们给出他们的依赖,而不是创建和查找依赖的对象
  • AOP(面向切面的编程):把应用业务逻辑和系统服务区分开
  • 容器:spring包含并管理应用中对象的生命周期和配置
  • MVC框架:SpringMVC是基于servlet的一套web框架,使用dispatcherServlet,ModelAndView和view Resolver等可以快速而且很好的搭建一个web服务和接口
  • 事务管理:Spring提供一个持续的事务管理接口,可以扩展到上至本地事务,下至全局事务
  • 异常处理:Spring提供方便的api把技术相关的异常转换为一致的unchecked异常

依赖注入

依赖注入,是IOC的一个方面,你不用创建对象,只需要描述它是怎么被创建的,不用在代码里面直接创建需要的对象,而是描述所需要的对象,之后容器负责将所需要的对象注入进去

依赖注入的方式

  • 构造器注入:通过容器触发一个类的构造器来实现,该类有一系列参数,每个参数代表对其他类的依赖
  • setter注入:容器通过调用无参构造器或者无参static工厂方法实例化bean之后,调用bean的setter方法
    使用构造器注入实现强制依赖,使用setter注入实现可选依赖

springBean

  • spring beans 是形成spring应用的主干java对象,被ioc容器初始化,装配和管理
    spring中所有的bean默认都是单例的,可以通过修改bean属性改变
  • 一个spring bean 定义包括容器必知的所有配置元数据,包括如何创建一个bean,它的生命周期和依赖

如何给spring容器提供配置元数据

  • 基于XML配置
  • 基于注解配置
  • 基于java api的配置

如何定义类的作用域

当定义一个bean,在spring里我们还可以给这个bean申明一个作用域,可以通过定义bean的scope属性来配置,如果要求每次都实例化一个新的bean,scope可以设为prototype,默认是singleton,表示每次都是同一个实例bean

bean的作用域

  • singleton:每个ioc容器只有一个实例bean
  • prototype:每次请求都生成一个新的实例bean
  • request:每次http请求都创建一个bean,该作用域仅在基于web的Spring ApplicationContext情形下有效
  • session:在一个 http session中,一个bean定义对应一个实例,仅在基于web的SpringApplicationContext情形下有效
  • global-session:在一个全局的http session中,一个bean定义对应一个实例,仅在基于web的springApplicationContext情形下有效

缺省的作用域是singleton,spring框架中的bean不是线程安全的

bean装配

指的是spring容器把bean组装到一起,前提是容器知道bean的依赖关系,然后通过依赖注入把他们装配到一起

bean的自动装配

  • no:默认是不通过自动装配,使用显示设置ref属性来装配
  • byName:通过参数名自动装配,容器自动装配和该bean的属性有相同名字的bean
  • byType:通过参数类型自动装配,容器会自动装配和该bean属性有相同类型的bean,如果出现多个会抛出异常
  • constructor:类似于byType,要给构造器提供参数,如果没有确定的带参数的构造器参数类型,会抛出异常
  • autodetect: 首先尝试用constructor来自动装配,如果无法工作,则使用byType

Spring注解

基于java的配置,允许在少量的java注解的帮助下,进行大部分的spring配置,而不是使用xml
比如:@Configuration,用来标记的类可以当做一个bean的定义,被spring IOC容器使用;@Bean,表示此方法将要返回一个对象,作为一个bean注册进spring的上下文

基于注解的容器配置

通过在相应的类,方法,或者属性上使用注解的方式,直接组件类中进行配置,而不需要使用xml来描述bean的装配关系

spring开启注解装配

需要在spring配置文件中显式配置<context:annotation-config>

spring事务管理

支持:编程式事务管理和声明式事务管理

  • 编程式事务管理:通过编程的方式管理事务,灵活性较大,但是难维护
  • 声明式事务管理:通过注解或者xml配置管理事务,可以将业务逻辑和事务管理分开
    spring框架为不同的框架提供了统一的编程模式,更好集成各种数据访问抽象层,同时提供了简单的事务管理api和声明式事务管理

事务传播

事务传播行为用来描述由某一个事务传播行为修饰的方法被嵌套进另一个方法的时事务如何传播

public void methodA(){
    methodB();
    //doSomething
 }
 @Transaction(Propagation=XXX)
 public void methodB(){
    //doSomething
 }
  • Spring中七种事务传播行为:

    • PROPAGATION_REQUIRED:如果当前没有事务,就新建一个事务,如果当前处于其他事务中,就加入到这个事务中
    • PROPAGATION_SUPPORT:支持当前事务,如果当前没有事务,就以非事务方式执行
    • PROPAGATION_MANDATORY:使用当前的事务,如果当前没有事务,就抛出异常
    • PROPAGATION_REQUIRES_NEW:新建事务,如果当前存在事务,把当前事务挂起。
    • PROPAGATION_NOT_SUPPORTED:以非事务方式执行操作,如果当前存在事务,就把当前事务挂起。
    • PROPAGATION_NEVER:以非事务方式执行,如果当前存在事务,则抛出异常。
    • PROPAGATION_NESTED:如果当前存在事务,则在嵌套事务内执行。如果当前没有事务,则执行与PROPAGATION_REQUIRED类似的操作。
  • spring中5种事务隔离级别

    • ISOLATION_DEFAULT:默认级别,保持和数据库一致
    • ISOLATION_READ_UNCOMMIT:读未提交,其他事务能够读取当前事务未提交的数据,会造成脏读
    • ISOLATION_READ_COMMINT:读已提交,其他事务只能读取当前事务已提交的数据,但是会造成不可重复读
    • ISOLATION_REPEATABLE_READ:可重复读,在一个事务里两次查询结果一样,但是会造成幻读
    • ISOLATION_SERIALIZABLE:串行化,所有的操作都是串行化的,能避免脏读,不可重复读和幻读

脏读、不可重复读、幻读

  • 脏读:指当一个事务正在访问数据,并且对数据进行了修改,而这种修改还没有提交到数据库中,这时,另外一个事务也访问这个数据,然后使用了这个数据。因为这个数据是还没有提交的数据, 那么另外一个事务读到的这个数据是脏数据,依据脏数据所做的操作可能是不正确的。
  • 不可重复读:指在一个事务内,多次读同一数据,在这个事务还没有结束时,另外一个事务也访问该同一数据,在第一个事务中的两次读数据之间,由于第二个事务的修改,那么第一个事务两次读到的数据可能是不一样的。这样就发生了在一个事务内两次读到的数据是不一样的,因此称为是不可重复读。
  • 幻读:当事务不是独立执行时发生的一种现象,例如第一个事务对一个表中的数据进行了修改,这种修改涉及到表中的全部数据行。同时,第二个事务也修改这个表中的数据,这种修改是向表中插入一行新数据。那么,以后就会发生操作第一个事务的用户发现表中还有没有修改的数据行,就好象发生了幻觉一样。

AOP

面向切面的编程,允许程序模块化横向切割关注点,或者横切典型的责任划分,如日志和事务管理

  • Aspect切面:AOP的核心就是切面,它将多个类的通用行为封装成可重用的模块,该模块包含一组api提供横切功能,比如:一个日志模块可以称作日志的aop切面,可以通过@Aspect注解的类实现
  • spring切面可以分为5种通知:
    • before:方法执行前被调用
    • after: 方法执行后被调用,无论是否执行成功
    • after-returning: 方法执行成功之后调用
    • after-throwing: 方法抛出异常退出时执行
    • around: 方法执行之前和之后调用

spring MVC

spring构建web的全功能MVC框架,允许以声明的方式把请求参数和业务对象绑定

DispatcherServlet

springMVC是围绕DispatcherServlet来设计的,他负责处理所有的http请求和响应

WebApplicationContext

继承了ApplicationContext并增加了一些web特有的功能,能找到被关联的servlet

springMVC的控制器

提供了一个访问应用程序的接口,控制器将用户的输入转成一个视图呈现给用户

@controller

控制器类注解

@RequestMapping

用来映射一个URL到一个类的指定方法上


Springboot

spring boot 是spring大家庭中的一员,旨在帮助开发者快速并且简单的构建项目,大多数springboot项目只需要很少的配置文件

  • 独立运行spring项目

    spring boot 可以打包成jar独立运行,只要有JRE,就可以运行

  • 内嵌servlet容器

    spring boot内嵌Tomcat,jetty等容器,无需以war包形式部署项目

  • 提供starter简化maven配置

    springboot 提供了一系列的start pom来简化maven的依赖加载,

  • 自动装载spring

    springboot会根据类路径的jar包,类,为jar包里面的类自动配置bean,极大的减少开发的配置

  • 准生产的监控

    springboot提供基于http ssh telnet对运行时项目的监控

  • 无代码生产和xml配置

    springboot不是借助代码生产实现的,而是通过条件注解实现的

springboot优点

  • 快速构建项目
  • 支持主流框架的集成
  • 项目可以独立运行,无需外部依赖servlet容器
  • 提供运行时的监控
  • 极大的提高开发,部署效率
  • 与云计算的天然集成

SpringBoot常用注解

  • @RestController/@Controller
  • @RequestMapping/@PostMapping/@GetMapping/@DeleteMapping
  • @Service/@Repository
  • @Configuration/@Component
  • @EnableAutoConfiguration/@EnableAsync/@SpringBootApplication
  • @Autowired/@Qualifier
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 196,165评论 5 462
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 82,503评论 2 373
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 143,295评论 0 325
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,589评论 1 267
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,439评论 5 358
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,342评论 1 273
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,749评论 3 387
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,397评论 0 255
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,700评论 1 295
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,740评论 2 313
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,523评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,364评论 3 314
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,755评论 3 300
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,024评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,297评论 1 251
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,721评论 2 342
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,918评论 2 336

推荐阅读更多精彩内容