news 2026/8/5 0:19:58

spring相关

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
spring相关

1.spring

Spring是一个开源的轻量级控制反转面向切面编程的容器框架。
轻量级是说它开发使用简单,功能强大
控制反转是指将对象的创建,销毁控制交给 ioc容器,方便解耦合,降低维护难度
面向切面编程是指将相同的逻辑横向抽取出来,可以对一些通用业务如事务,日志进行集中管理

1.spring的bean,懒加载和非懒加载区别

懒加载:需要使用对象的时候才创建,节省资源
非懒加载:也叫迫切加载,容器启动时就创建对象,消耗资源
spring中默认时迫切加载,即在项目启动时,spring会扫描符合条件的所有bean并将其初始化
如果需要懒加载,可以使用@Lazy注释或者xml中配置属性default-lazy-init=“true”

2.spring的依赖注入

1.setter 方式注入,通过反射调用无参构造方法生成对象,再通过对于的setter方法注入配置,支持注解和 xml两种实现方式

2.构造器方式注入,通过反射调用有参构造方法生成对象,支持注解和 xml两种实现方式

注解实现方式:@Autowired,它是默认按类型匹配的、@Resource,它是默认按名字匹配的

3.spring中 单例(默认单例)和多例的区别

如果一个bean是单例模式的,在处理多次请求的时候,在ioc容器中只实例化一个bean,这个对象会被保存在一个 ConcurrentHashMap中,当有请求来的时候,会先从map中查看,如果有就直接使用这个对象,没有才会实例化新的对象。
如果是多例模式的bean,每次请求来的时候,会直接实例化新的bean,没有map缓存的过程。
注:单例模式中,对象的生命周期是ioc容器来管理,但是多例模式是不管的,要么我们自己管理,要么等对象没有引用了,垃圾回收机制来销毁。

4.spring 的 事务机制

1.什么是事务:

事务是一组不可分割的操作序列,这些操作要么全部成功执行,要么全部失败回滚,以此来保证数据的一致性和完整性。

2.事务传播机制

当一个事务方法调用另一个事务方法时,Spring 如何管理这些事务的开启、挂起、合并等操作。

1.PROPAGATION_REQUIRED 默认

当一个事务方法调用另一个使用PROPAGATION_REQUIRED的事务方法时,如果调用者已经开启了事务,被调用方法就加入这个事务;如果调用者没有事务,被调用方法就开启新事务。
2.PROPAGATION_SUPPORTS
当一个事务方法调用另一个使用PROPAGATION_SUPPORTS的事务方法时,如果当前存在事务,被调用方法就加入该事务;如果没有事务,就以非事务方式执行。
3.PROPAGATION_MANDATORY
当一个事务方法调用另一个使用PROPAGATION_MANDATORY的事务方法时,如果当前存在事务,被调用方法就加入该事务;如果没有事务,就抛异常。
4.PROPAGATION_REQUIRES_NEW
当一个事务方法调用另一个使用PROPAGATION_REQUIRES_NEW的事务方法时,不管当前是否有事务,被调用方法都会创建新事务。如果当前有事务,会先挂起当前事务,等新事务执行完,再继续执行原来的事务。
5.PROPAGATION_NOT_SUPPORTED
当一个事务方法调用另一个使用PROPAGATION_NOT_SUPPORTED的事务方法时,以非事务方式执行,如果当前有事务,会挂起当前事务。
6.PROPAGATION_NEVER
当一个事务方法调用另一个使用PROPAGATION_NEVER的事务方法时,以非事务方式执行,如果当前存在事务,就会抛出异常。
7.PROPAGATION_NESTED
当一个事务方法调用另一个使用PROPAGATION_NESTED的事务方法时,如果当前存在事务,就在嵌套事务中执行;如果没有事务,就创建新事务。嵌套事务有自己的保存点,可以独立回滚。

通俗理解:你在餐厅吃饭,如果有朋友在一个大包间里聚餐,你就在这个大包间里再隔出一个小包间自己聚餐(嵌套事务);要是没有朋友在聚餐,你就自己开个包间聚餐(创建新事务)。小包间出问题了(嵌套事务回滚),不影响大包间里其他人吃饭(外部事务可以选择是否继续)。

5.事务失效的场景

1.数据库本身不支持事务:例如 MySQL 的 InnoDB 存储引擎支持事务,而 MyISAM 不支持。

2.在 Spring 中,只有public方法上的事务注解才会生效。因为 Spring AOP 是通过代理模式实现事务管理的,代理机制对非public方法的支持存在限制。

3.当一个类的内部方法调用另一个有事务注解的方法时,事务会失效。这是因为 Spring AOP 是基于代理模式实现的,内部调用不会经过代理对象,从而无法触发事务拦截器:

@Service public class UserService { public void outerMethod() { // 内部调用,事务失效 this.innerMethod(); } @Transactional public void innerMethod() { // 数据库操作 } } // 事务失效

4.@Transactional注解默认只对RuntimeException及其子类和Error进行回滚。如果抛出的异常不是这些类型,事务将不会回滚。

但是可以自己定义即可:

@Transactional(rollbackFor = Exception.class) public void updateProduct() throws Exception { // 数据库操作 } // 这会儿就能识别到该异常

5.事务传播行为配置错误 (PROPAGATION_SUPPORTS)。

6.异常事件被自己try catch掉了。

7.如果数据源配置不正确,如数据库连接信息错误、数据源未正确注入等,会导致事务管理无法正常工作。

6.aop用到的设计模式

体现为拦截器执行链(执行链模式)

客户端调用 → 代理对象 → 拦截器链执行 ↓ [Before Advice 1] → [Before Advice 2] → [Around Advice] ↓ 目标方法执行(Method Invocation) ↓ [After Returning Advice] → [After Advice] → [After Throwing Advice]

  • @BeforeAspectJMethodBeforeAdvice
  • @AfterReturningAspectJAfterReturningAdvice
  • @AroundAspectJAroundAdvice

2. spring boot

Springboot是一个基于spring的框架,对spring做了大量简化,使开发流程更快,更高效,
大量简化maven依赖,管理了大量的基础依赖
基于注解配置(JavaConfig),无需xml配置(xml配置是真的难受)
内嵌Tomcat(没记错是某个依赖提供的),部署流程简单
打包和部署更加灵活,允许独立运行(微服不就是一个个的boot项目嘛)

1.spring-boot-starter-web

该依赖构建了web项目的基本环境,集成了日志,tomcat,springmvcjson支持等

2.BeanFactory 和 ApplicationContext

// 类层次结构(简化) BeanFactory (基础容器) ↑ ListableBeanFactory ↑ HierarchicalBeanFactory ↑ ApplicationContext (高级容器) ↑ ConfigurableApplicationContext ↑ AbstractApplicationContext ↑ ClassPathXmlApplicationContext // 具体实现 FileSystemXmlApplicationContext AnnotationConfigApplicationContext WebApplicationContext

  1. ApplicationContext 是 BeanFactory 的超集,提供更多企业级功能
  2. 延迟加载 vs 迫切加载是最显著的区别,影响启动时间和内存使用
  3. ApplicationContext 通过启动时检测配置错误发现问题
  4. Spring Boot 默认使用 ApplicationContext并进行了优化
  5. 现代应用通常使用 ApplicationContext,除非有特殊资源限制
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/14 15:13:29

【第一章】基于Simulink的控制器开发教程——目录

👋前言 基于Simulink的控制器开发是一种模型驱动的开发模式,核心是通过图形化建模搭建控制器算法,再结合仿真验证、最终实现控制器的快速开发与部署。这种开发模式覆盖了从算法设计到硬件实现的全流程,支持多种类型控制器的开发&a…

作者头像 李华
网站建设 2026/7/14 15:13:43

Qwen2-VL-2B-Instruct实操手册:Streamlit界面调试信息与Device维度解析

Qwen2-VL-2B-Instruct实操手册:Streamlit界面调试信息与Device维度解析 1. 项目简介与核心价值 如果你正在寻找一个能真正理解图片和文字之间关系的工具,那么GME-Qwen2-VL-2B-Instruct可能就是你要找的答案。这不是一个聊天机器人,而是一个…

作者头像 李华