spring 框架详细总结

1.什么是spring?

spring是一个分层的轻量级的开源框架,为企业开发提供了丰富的功能,降低了开发的复杂性

分层: 一站式,每一个层都提供的解决方案

spring提供了IOC AOP 和DI 以及事务的支持 可以更方便的集成其他框架

spring的特点:

  • 方便解耦,简化开发 (IOC)

    spring是一个大容器,我们可以将所有对象的创建和依赖关系维护交给spring管理

  • AOP编程的支持

    spring提供了面向切面编程 可以方便的实现对程序权限的拦截、运行监控等功能

  • 声明式事务的支持

    只需要通过配置就可以完成对事物的管理 无需手动编程

  • 方便程序的测试

    spring对Junit4支持 可以通过注解测试spring程序

  • 方便集成其他优秀框架

    Spring不排斥各种优秀的开源框架,其内部提供了对各种优秀框架

  • 降低java API的使用难度

    spring对一些开发中非常难用的API进行了封装,降低了应用难度

1.1什么是IOC?

IOC (Inversion of Control) 控制反转

这种设计思想 把bean 的创建以及销毁和查找依赖对象 交给了IOC容器进行管理

这样降低了代码之间的耦合度 提高复用性 使得程序更加的灵活和高扩展性

优点:

  • 降低了代码之间的耦合度

  • 便于测试

  • 复用性高

  • 使得程序更灵活 复用性高 易于维护

1.2什么是AOP?

AOP是面向切面编程的一种思想体现,通过预编译和运行时期的动态代理实现程序功能的统一维护。

1.1作用:

使得业务逻辑各个部分耦合度降低,提高代码的复用性 同时提高了代码的开发效率

AOP面向切面技术 可以通过底层动态代理技术(proxy cglib) 实现在不修稿源码的情况下对方法进行增强

1.2优势:
  • 非侵入性: 可以在不修改源码的情况下 进行源码的修改
  • 高内聚: AOP技术可以指 集中观察某一个点 方便维护
  • 可移植性: 可以方便对某一个观察点 进行增删改
1.3使用场景

大多数情况下 都是使用于非功能性需求中

  • 权限控制
  • 日志收集
  • 缓存设置
  • 分布式追踪
  • 异常处理
  • 事务控制
1.4实现方式
  • JDK提供

1.3 DI注入

依赖注入,是IOC容器装配 注入对象的一种方式

注入方式有三种:

  • setter注入 不需要注入的参数之前就初始化

  • 构造器注入 在初始化的时候 它的参数要之前就初始化 不然报错 可以用加@Lazy 懒加载进行解决

  • 注解注入 @Autowired自动装配 通过类型注入 @Qualifier(“XXXX”)

  • @Autowired 它可以对类成员变量、方法及构造函数进行标注,完成自动装配的工作,通过@Autowired 的使用来消除 set/get 方法。

  • @Autowired和@Resource两个注解的区别:
    1.@Autowired 默认按照byType方式进行bean匹配,@Resource默认按照byName方式进行bean匹配
    2.@Autowired 是Spring的注解,@Resource是J2EE的注解

1.4 spring有哪些主要模块

1.spring core 框架的最基础部分,提供IOC和依赖注入特性

2.spring context 构建与core封装包基础上

3.spring dao:Data Access Object 提供了JDBC的抽象层。

4.spring aop:提供了面向切面的编程实现,让你可以自定义拦截器、切点等。

5.spring Web:提供了针对 Web 开发的集成特性,例如文件上传,利用 servlet listeners 进行 ioc 容器初始化和针对 Web 的 ApplicationContext。

6.spring Web mvc:spring 中的 mvc 封装包提供了 Web 应用的 Model-View-Controller(MVC)的实现。

spring 中的 bean 默认是单例模式

1.5 spring 支持几种 bean 的作用域?

spring 支持 5 种作用域,如下:

singleton:spring ioc 容器中只存在一个 bean 实例,bean 以单例模式存在,是系统默认值;

prototype:每次从容器调用 bean 时都会创建一个新的示例,既每次 getBean()相当于执行 new Bean()操作;

Web 环境下的作用域:

request:对于每次 HTTP 请求,使用 request 定义的 bean 都将产生一个新实例,即每次 HTTP 请求将会产生不同的 bean 实例。

session:同一个 Session 共享一个 bean 实例。

global-session:同 session 作用域不同的是,所有的Session共享一个Bean实例。

1.6 spring自动装配bean有哪些方式?

no:默认值,表示没有自动装配,应使用显式 bean 引用进行装配。

byName:它根据 bean 的名称注入对象依赖项。

byType:它根据类型注入对象依赖项。

构造函数:通过构造函数来注入依赖项,需要设置大量的参数。

1 .7spring 中的 bean 是线程安全的吗?

spring 中的 bean 默认是单例模式,spring 框架并没有对单例 bean 进行多线程的封装处理。

实际上大部分时候 spring bean 无状态的(比如 dao 类),所有某种程度上来说 bean 也是安全的,但如果 bean 有状态的话(比如 view model 对象),那就要开发者自己去保证线程安全了,最简单的就是改变 bean 的作用域,把“singleton”变更为“prototype”,这样请求 bean 相当于 new Bean()了,所以就可以保证线程安全了。

解决方法:

1.synchronized修饰方法 不推荐 极大地降低了效率

2.synchrohized代码块 不推荐 比起修饰方法 确实快了不少 但是还是很影响效率

3.改变bean对象的作用域 每个请求都会创建一个对象,此方法会很浪费内存,效率也不高

4.可以使用 ThreadLocal

  • 每个线程(Thread)内部都持有一个ThreadLocalMap对象。
  • ThreadLocalMap的Key是某个ThreadLocal对象,值是任意Object。
  • 不同线程,内部有自己的ThreadLocalMap,因此各线程资源互相不会干扰。

1.8 spring 事务实现方式有哪些?

声明式事务:声明式事务也有两种实现方式,基于 xml 配置文件的方式和注解方式(在类上添加 @Transaction 注解)。

编码方式:提供编码的形式管理和维护事务。

1.9事务特性及实现方式

原子性:事务是一组不可分割的操作单元,这组单元要么同时成功要么同时失败(由DBMS的事务管理子系统来实现);

一致性:事务前后的数据完整性要保持一致(由DBMS的完整性子系统执行测试任务);

隔离性:多个用户的事务之间不要相互影响,要相互隔离(由DBMS的并发控制子系统实现);

持久性:一个事务一旦提交,那么它对数据库产生的影响就是永久的不可逆的,如果后面再回滚或者出异常,都不会影响已提交的事务(由DBMS的恢复管理子系统实现的)

1.10 说一下 spring 的事务隔离?

spring 有五大隔离级别,默认值为 ISOLATION_DEFAULT(使用数据库的设置),其他四个隔离级别和数据库的隔离级别一致:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值