八股文 --- spring相关

是什么

一个框架

具有AOP面向切片, IOC控制反转, DI依赖注入的特性
面向接口编程
有效避免重复造轮子
很多模块的集合

AOP

基于一个切片编程, 涉及底层原理
将那些与业务无关,却为业务模块所共同调用的逻辑或责任(例如事务处理、日志管理、权限控制等)封装起来
基于动态代理实现的,动态代理是有两种,一种是jdk动态代理,一种是cglib动态代理

常见应用场景是spring事务管理

IOC

控制反转, 由容器管理对象

最常见就是不使用 new 来新建对象, 而是通过 @Autowird实现注入

在springboot中, 连用户配置都不需要写多少, 直接自动装配

DI

依赖注入注解开发

最多的就是 @Autowird 把容器中的bean装配到对象

除了 @Autowird, 还有 @Resource, @inject

MVC

是Spring的一个重要模块, 构建相关Web程序

最佳实践就是 mapper - Service - Controller 结构

Bean

是spring容器处理对象的方式, bean是指被容器所管理的对象

把一个类声明为 Bean的注解

  • @Component:通用的注解,可标注任意类为 Spring 组件。如果一个 Bean 不知道属于哪个层,可以使用@Component 注解标注。
  • @Repository : 对应持久层即 Dao 层,主要用于数据库相关操作。
  • @Service : 对应服务层,主要涉及一些复杂的逻辑,需要用到 Dao 层。
  • @Controller : 对应 Spring MVC 控制层,主要用于接受用户请求并调用 Service 层返回数据给前端页面

@Bean不是声明类, 而是声明方法

  • @Bean 注解通常是我们在标有该注解的方法中定义产生这个 bean,@Bean告诉了 Spring 这是某个类的实例,当我需要用它的时候还给我
  • 很多地方我们只能通过 @Bean 注解来注册 bean。比如当我们引用第三方库中的类需要装配到 Spring容器时,则只能通过 @Bean来实现

注入Bean的注解

  •  @Autowird, 还有 @Resource, @inject

Bean生命周期

spring内部结构

包含一大堆模块, 统称是spring

截止目前, spring已经到了 6.0+

核心不变, 但是小版本一直在变

Core部分

Spring 框架的核心模块,也可以说是基础模块,主要提供 IoC 依赖注入功能的支持。Spring 其他所有的功能基本都需要依赖于该模块,我们从上面那张 Spring 各个模块的依赖关系图就可以看出来。

  • spring-core:Spring 框架基本的核心工具类。
  • spring-beans:提供对 bean 的创建、配置和管理等功能的支持。
  • spring-context:提供对国际化、事件传播、资源加载等功能的支持。
  • spring-expression:提供对表达式语言(Spring Expression Language) SpEL 的支持,只依赖于 core 模块,不依赖于其他模块,可以单独使用

就是提供 Bean的创建与管理, 上下文的管理, 核心内容

AOP部分

  • spring-aspects:该模块为与 AspectJ 的集成提供支持。
  • spring-aop:提供了面向切面的编程实现。
  • spring-instrument:提供了为 JVM 添加代理(agent)的功能。 具体来讲,它为 Tomcat 提供了一个织入代理,能够为 Tomcat 传递类文 件,就像这些文件是被类加载器加载的一样。没有理解也没关系,这个模块的使用场景非常有限

实现面向切片编程, 最多的就是 Spring-AOP

Data部分

  • spring-jdbc:提供了对数据库访问的抽象 JDBC。不同的数据库都有自己独立的 API 用于操作数据库,而 Java 程序只需要和 JDBC API 交互,这样就屏蔽了数据库的影响。
  • spring-tx:提供对事务的支持。
  • spring-orm:提供对 Hibernate、JPA、iBatis 等 ORM 框架的支持。
  • spring-oxm:提供一个抽象层支撑 OXM(Object-to-XML-Mapping),例如:JAXB、Castor、XMLBeans、JiBX 和 XStream 等。
  • spring-jms : 消息服务。自 Spring Framework 4.1 以后,它还提供了对 spring-messaging 模块的继承

基本被Mybatis替代

SpringWeb

  • spring-web:对 Web 功能的实现提供一些最基础的支持。
  • spring-webmvc:提供对 Spring MVC 的实现。
  • spring-websocket:提供了对 WebSocket 的支持,WebSocket 可以让客户端和服务端进行双向通信。
  • spring-webflux:提供对 WebFlux 的支持。WebFlux 是 Spring Framework 5.0 中引入的新的响应式框架。与 Spring MVC 不同,它不需要 Servlet API,是完全异步

Spring, springMVC, springboot区别

springMVC

SpringMVC是Spring框架的一个模块

赋予 Spring 快速构建 MVC 架构的 Web 程序的能力

实际上就是springboot中类似 mapper - Service - Controller 类的层次结构

Springboot

springboot是Spring通过xml和java进行显示配置,核心是自动装配, 自动扫描

通过 @SpringbootApplication 指定其为Springboot项目入口文件, 指定了要扫描的注解范围

在spring中, 需要手动装配bean, 而在springboot中实现了bean的自动装配

spring事务

事务特性ACID: 原子性, 一致性, 隔离性, 持久性

  • 最小分割
  • 前后数据一致
  • 内部执行独立
  • 修改持久化

支持多种事务隔离级别, 通过声明实现

可以对多个数据库进行查询

AOP是对事务进行管理控制

隔离级别

  • TransactionDefinition.ISOLATION_DEFAULT :使用后端数据库默认的隔离级别,MySQL 默认采用的 REPEATABLE_READ 隔离级别 Oracle 默认采用的 READ_COMMITTED 隔离级别.
  • TransactionDefinition.ISOLATION_READ_UNCOMMITTED :最低的隔离级别,使用这个隔离级别很少,因为它允许读取尚未提交的数据变更,可能会导致脏读、幻读或不可重复读
  • TransactionDefinition.ISOLATION_READ_COMMITTED : 允许读取并发事务已经提交的数据,可以阻止脏读,但是幻读或不可重复读仍有可能发生
  • TransactionDefinition.ISOLATION_REPEATABLE_READ : 对同一字段的多次读取结果都是一致的,除非数据是被本身事务自己所修改,可以阻止脏读和不可重复读,但幻读仍有可能发生。
  • TransactionDefinition.ISOLATION_SERIALIZABLE : 最高的隔离级别,完全服从 ACID 的隔离级别。所有的事务依次逐个执行,这样事务之间就完全不可能产生干扰,也就是说,该级别可以防止脏读、不可重复读以及幻读。但是这将严重影响程序的性能。通常情况下也不会用到该级别
  • 46
    点赞
  • 32
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值