几分钟带你快速了解Spring框架理论知识!

简介: 几分钟带你快速了解Spring框架理论知识!

1.Spring的两大核心理解

Spring的两大核心是IOC(控制反转)和AOP(面向切面编程)。

IOC控制反转:其实就是将管理对象的权利移交给了Spring,以前需要对象的创建主动去哪和时机是自己把控的,现在是将这个权利转移到了Spring容器,由Spring容器根据配置文件去创建实例和管理各个实例之间的依赖关系,对象之间的松散耦合,也利于重复利用功能。直白点就是说,IOC让对象的创建不用去NEW了,可以由Spring根据我们提供的配置文件自动生产,我们需要对象的时候直接从容器里面获取就可以了。

Spring配置文件里面配置了类的字节码位置和信息,容器生成的时候会去加载配置文件识别字节码信息,通过反射创建类的对象。

IOC的注入方式:setter方式、构造器、注解方式

AOP面向切面编程:其实就是把那些将业务无关,但是却对多个对象产生影响的公共行为和逻辑抽取封装成一个可重用的模块,这个模块其实就是切面。比如:日志管理等。SpringAOP使用的是动态代理,动态代理就是说AOP框架不会修改字节码,而是在每次运行时候在内存里面临时为方法生成一个AOP对象,这个AOP对象包含了目标对象的全部方法,并且在特定的切点做了增强处理,并回调原对象的方法。

2.Spring支持bean的几种作用域

(1)singleton:默认是单例bean,一个容器里面只有一个bean

(2)propotype:每实例化一个对象就会创建一个bean

(3)request:一个request请求创建一个bean,在请求结束后垃圾回收容器会将其进行回收

(4)session:和request类似,一个会话共享一个bean,在会话或session关闭后bean将会被回收

(5)global-session:全局作用域,所有的会话共享一个实例。如果想要声明一个让所有会话共享的存储变量,就可以让改全局变量存储在global-session中。

3.BeanFactory和ApplicationContext的区别

beanFactory是Spring的最高接口,它实现了Spring容器的一些基本功能,调用起来非常麻烦,一般是面向Spring自身使用的。在项目启动时候,bean不会立马实例化,只有在调用的时候才会被实例化。

applicationContext是beanFactory的子接口,扩展了一些功能。它在项目一启动后,就会去加载bean然后放入Spring容器里面,待使用时候再获取。

4.Spring框架用到的设计模式

(1)工厂模式:里面的beanFactory使用的就是简单的工厂模式,用于bean的生产。

(2)单例模式:bean默认是单例,一个容器里面只有一个bean。

(3)代理模式:Spring里面的AOP就是通过JDK动态代理和CGLIB字节码技术实现。

(4)观察者方法:定义对象键一种一对多的依赖关系。如果一个对象的属性发生变化,其他依赖的对象都可以得到通知并被制动更新。Spring里面的Listener就是,ApplicationListener。

(5)模板方式:实现代码的重复使用,如JpaTemplate、RestTemplate。

5.Spring事务的实现方式和原理

Spring事务的本质就是数据库对事务的支持,如果数据库不支持事务,Spring也无法实现事务。数据库实现数据的提交和回滚使用的其实是binlog和relog实现的。

实现方式有:

(1)编程式事务:begintransactionManager()、commit()、rollback()等事务管理方法实现。

(2)声明式事务:通过@Transactional注解的方式实现。

6.Spring的通知类型及执行情况

(1)前置通知类型:在切点运行之前执行。

(2)后置通知类型:在切点正常运行之后执行。

(3)异常通知类型:在切点发生异常的时候执行。

(4)最终通知类型:在切点的最终执行。

(5)环绕通知类型:程序员可以通过编码的方式自己定义通知的设置,用于解决其他通知时序问题。

7.Spring对象默认单例还是多例,单例bean存不存在线程安全问题

Spring对象默认是单例的,但是可以设置为多例。

单例bean对象对应的类可能会存在可变的成员变量,里面存在线程改变成员变量的值时候,多线程会去操作该bean就会出现线程安全问题。出现的原因是:多线程操作如果改变成员变量,其他线程无法访问该bean,造成数据混乱。

可以通过在bean对象中避免设置可变成员变量、定义一个ThreadLocal变量,将里面的可变成员变量都放在该变量里面。

8.@Resource和@Autowired依赖注入的区别

@Resource它是Spring提供的注解,默认按照名称来装配,如果通过名称找不到可以通过匹配的bean则会按照类型来进行装配,如果通过名称也找不到则会报错。但是需要知道,如果执行通过name属性来制定,就只会按照名称的方式来进行装配,找不到就会报错,不会再按照类型类装配。

@Autowried它是java原生提供的,默认按照类型来装配,默认要求依赖对象必须存在,如果为空需要将required设置为false。如果想要实现通过名称来装配,需要和@Qualifier搭配一起使用指定名称。

9.@Qualifier的使用场景

必须和@Autowired一起搭配使用,不能单独使用,两者搭配实现通过名称来装配,其实就实现和@Resource一样的功能。

10.Spring的常用注解

@Component:可以用于各个层,用于对象实例化

@Controller:用于控制层,用于对象实例化

@Serveice:用于业务层,用于对象实例化

@Repository:用于dao层,用于对象实例化

@Value:简单属性的依赖注入

@Resource:实现对象的装配,默认按照名称进行装配,如果没找到可以按照类型去装配

@Autowried:实现对象的装配,默认按照类型进行装配,如果没找到会抛出异常

@Qualifier:和@Autowried搭配一起使用,实现按照名称进行装配

@Bean:标在方法上,告诉方法产生一个bean对象,然后将其交给Spring管理并放入容器里面

@ComponentScan:组件扫描

@Configiration:拥有该注解被认为是配置类,系统一启动,Spring会将里面需要创建的对象进行创建,放进bean容器里面,需要时候再从里面获取

@Transactional:放在方法上,具有事务管理功能

@Import:在配置类里面引入另一个配置类的内容

@PostConstruct、@PreDestory:用于设置Spring对象创建之后和销毁之前需要执行的操作

@PropertySource:用于引入其它的properties配置文件

11.Spring的事务传播行为

事务的传播行为其实说的就是当多个事务同时存在时候Spring怎么处理这些事务。

(1)propagation_requried:如果当前存在事务则加入该事务,如果不存在事务,创建新的事务。

(2)propagation_support:支持当前事务。如果当前存在事务则加入该事务,如果不存在事务则按非事务执行。

(3)propagation_not_support:以非事务执行。如果当前存在事务,则挂起事务以非事务执行。

(4)propagation_never:以非事务执行。如果存在事务,则抛出异常。

(5)propagation_requries_new:创建新事务,不管当前存不存在事务都需要创建新事务。

(6)propagation_mandatory:支持当前事务,如果当前存在事务就加入事务,如果不存在就排除异常。

(7)propagation_nested:如果当前存在事务,在嵌套事务内执行。如果没有事务,则按requried属性执行。

12.Spring中的隔离级别

(1)isolation_default:这个是PlatfromTransactionManager默认的事务隔离别,使用数据库默认隔离级别。

(2)isolation_read_uncommitted:读未提交,允许另一个事务可以看到这个事务未提交的数据。

(3)isolation_read_committed:读已提交,保证一个事务修改的数据只有在提交后才可以被另一个事务读取,而且可以看到该事务对已有记录的更新。解决脏数据的问题。

(4)isolation_repeatable_read:可重复读,保证一个事务修改的数据只有在提交后才可以被另一个事务读取,但是看不到该事务对已有记录的更新。行表。

(5)isolation_serializable:一个事务在执行的过程中完全看不到其他事务对数据库做的更新。标锁。

相关文章
|
1月前
|
数据采集 监控 前端开发
二级公立医院绩效考核系统源码,B/S架构,前后端分别基于Spring Boot和Avue框架
医院绩效管理系统通过与HIS系统的无缝对接,实现数据网络化采集、评价结果透明化管理及奖金分配自动化生成。系统涵盖科室和个人绩效考核、医疗质量考核、数据采集、绩效工资核算、收支核算、工作量统计、单项奖惩等功能,提升绩效评估的全面性、准确性和公正性。技术栈采用B/S架构,前后端分别基于Spring Boot和Avue框架。
|
2月前
|
Java API 数据库
构建RESTful API已经成为现代Web开发的标准做法之一。Spring Boot框架因其简洁的配置、快速的启动特性及丰富的功能集而备受开发者青睐。
【10月更文挑战第11天】本文介绍如何使用Spring Boot构建在线图书管理系统的RESTful API。通过创建Spring Boot项目,定义`Book`实体类、`BookRepository`接口和`BookService`服务类,最后实现`BookController`控制器来处理HTTP请求,展示了从基础环境搭建到API测试的完整过程。
52 4
|
2月前
|
JavaScript 安全 Java
如何使用 Spring Boot 和 Ant Design Pro Vue 实现动态路由和菜单功能,快速搭建前后端分离的应用框架
本文介绍了如何使用 Spring Boot 和 Ant Design Pro Vue 实现动态路由和菜单功能,快速搭建前后端分离的应用框架。首先,确保开发环境已安装必要的工具,然后创建并配置 Spring Boot 项目,包括添加依赖和配置 Spring Security。接着,创建后端 API 和前端项目,配置动态路由和菜单。最后,运行项目并分享实践心得,包括版本兼容性、安全性、性能调优等方面。
164 1
|
2月前
|
Java API 数据库
Spring Boot框架因其简洁的配置、快速的启动特性及丰富的功能集而备受开发者青睐
本文通过在线图书管理系统案例,详细介绍如何使用Spring Boot构建RESTful API。从项目基础环境搭建、实体类与数据访问层定义,到业务逻辑实现和控制器编写,逐步展示了Spring Boot的简洁配置和强大功能。最后,通过Postman测试API,并介绍了如何添加安全性和异常处理,确保API的稳定性和安全性。
41 0
|
2月前
|
前端开发 Java 数据库连接
Spring 框架:Java 开发者的春天
Spring 框架是一个功能强大的开源框架,主要用于简化 Java 企业级应用的开发,由被称为“Spring 之父”的 Rod Johnson 于 2002 年提出并创立,并由Pivotal团队维护。
63 1
Spring 框架:Java 开发者的春天
|
2月前
|
人工智能 Java API
阿里云开源 AI 应用开发框架:Spring AI Alibaba
近期,阿里云重磅发布了首款面向 Java 开发者的开源 AI 应用开发框架:Spring AI Alibaba(项目 Github 仓库地址:alibaba/spring-ai-alibaba),Spring AI Alibaba 项目基于 Spring AI 构建,是阿里云通义系列模型及服务在 Java AI 应用开发领域的最佳实践,提供高层次的 AI API 抽象与云原生基础设施集成方案,帮助开发者快速构建 AI 应用。本文将详细介绍 Spring AI Alibaba 的核心特性,并通过「智能机票助手」的示例直观的展示 Spring AI Alibaba 开发 AI 应用的便利性。示例源
1058 9
|
2月前
|
人工智能 开发框架 Java
总计 30 万奖金,Spring AI Alibaba 应用框架挑战赛开赛
Spring AI Alibaba 应用框架挑战赛邀请广大开发者参与开源项目的共建,助力项目快速发展,掌握 AI 应用开发模式。大赛分为《支持 Spring AI Alibaba 应用可视化调试与追踪本地工具》和《基于 Flow 的 AI 编排机制设计与实现》两个赛道,总计 30 万奖金。
|
1月前
|
JavaScript 安全 Java
如何使用 Spring Boot 和 Ant Design Pro Vue 构建一个前后端分离的应用框架,实现动态路由和菜单功能
本文介绍了如何使用 Spring Boot 和 Ant Design Pro Vue 构建一个前后端分离的应用框架,实现动态路由和菜单功能。首先,确保开发环境已安装必要的工具,然后创建并配置 Spring Boot 项目,包括添加依赖和配置 Spring Security。接着,创建后端 API 和前端项目,配置动态路由和菜单。最后,运行项目并分享实践心得,帮助开发者提高开发效率和应用的可维护性。
62 2
|
1月前
|
消息中间件 NoSQL Java
springboot整合常用中间件框架案例
该项目是Spring Boot集成整合案例,涵盖多种中间件的使用示例,每个案例项目使用最小依赖,便于直接应用到自己的项目中。包括MyBatis、Redis、MongoDB、MQ、ES等的整合示例。
99 1
|
2月前
|
Java 数据库连接 开发者
Spring 框架:Java 开发者的春天
【10月更文挑战第27天】Spring 框架由 Rod Johnson 在 2002 年创建,旨在解决 Java 企业级开发中的复杂性问题。它通过控制反转(IOC)和面向切面的编程(AOP)等核心机制,提供了轻量级的容器和丰富的功能,支持 Web 开发、数据访问等领域,显著提高了开发效率和应用的可维护性。Spring 拥有强大的社区支持和丰富的生态系统,是 Java 开发不可或缺的工具。