spring问题点

1.事务

1.1.事务传播

同一个类中 事务A调非事务B B抛异常 AB事务生效(具有传播性)
同一个类中 事务A调非事务B A抛异常 AB事务生效
也就是主方法加了事务注解 则方法内调用的其他本类方法无需加事务注解,
发生异常时可以保证事务的回滚
最常用

1.2.代理

需要用到代理的是,非事务A调用事务B,如果想让B的事务生效,需要用代理模式

2.循环依赖

@Validated 底层为AOP机制,注解会导致循环依赖问题(即使加了spring:main:allow-circular-references: true)。

3.spring扩展点

3.1重写afterPropertiesSet()方法

AbstractAutowireCapableBeanFactory#initializeBean()方法中会执行我们重写的方法。
在这里插入图片描述
在这里插入图片描述

3.2.@PostConstruct

AbstractAutowireCapableBeanFactory#initializeBean()方法中会执行我们加了@PostConstruct注解的方法。
是CommonAnnotationBeanPostProcessor执行的,方法在他的父类InitDestroyAnnotationBeanPostProcessor
在这里插入图片描述
在这里插入图片描述
也就是在3.1方法的上面

3.3.initMethod

在这里插入图片描述

3.4.BeanPostProcessor接口

重写这两个方法

    @Overridepublic Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {return bean;}@Overridepublic Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {return bean;}

AbstractAutowireCapableBeanFactory#initializeBean()方法中会执行我们重写的方法。
分别在invokeInitMethods方法的前后执行
在这里插入图片描述
也可以实现bean创建后的逻辑,但是要注意类型判断,不然每个bean(包括系统级的bean)初始化时都会调用我们重写的方法。

4.bean的作用域

4.1.单例

singleton(默认)
所有线程共享,对于有状态的单例bean存在线程安全问题
有状态的单例bean(它是有存储能力的。也就是说至少有一个属性来标识它目前的状态,意思就是你想在代码里用一个变量存储一个值,在代码运行期间想要实时获取,且不同用户值不同,例如租户id)

public class TestManagerImpl implements TestManager{  private User user;    public void deleteUser(User e) throws Exception {  user = e ;           //1  prepareData(e);  }  public void prepareData(User e) throws Exception {  user = getUserByID(e.getId());            //2  .....  //使用user.getId();                       //3  .....  .....  }     
} 
//不同对象的行为不同

如果该Bean配置为singleton,会出现什么样的状况呢?
如果有2个用户访问,都调用到了该Bean.
假定为user1,user2
当user1 调用到程序中的1步骤的时候,该Bean的私有变量user被付值为user1
当user1的程序走到2步骤的时候,该Bean的私有变量user被重新付值为user1_create
理想的状况,当user1走到3步骤的时候,私有变量user应该为user1_create;
但如果在user1调用到3步骤之前,user2开始运行到了1步骤了,由于单态的资源共享,则私有变量user被修改为user2
这种情况下,user1的步骤3用到的user.getId()实际用到是user2的对象。(我的理解是配置成singleton会造成资源混乱问题-对于有状态的bean)
正确使用方式

    /*** 当前租户编号*/private static final ThreadLocal<Long> TENANT_ID = new TransmittableThreadLocal<>();/*** 获得租户编号。** @return 租户编号*/public static Long getTenantId() {return TENANT_ID.get();}public static void setTenantId(Long tenantId) {TENANT_ID.set(tenantId);}

4.2多例

prototype
每次都是获取到新的对象,线程安全
定义方式
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/664385.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Docker极速入门掌握基本概念和用法

1、Docker概念 1.1什么是docker Docker是一个快速交付应用、运行应用的技术&#xff0c;具备以下优势 可将程序及其依赖、运行环境一起打包为一个镜像&#xff0c;可以迁移到任意Linux操作系统运行时利用沙箱机制形成隔离容器&#xff0c;各个应用互不干扰启动、移除都可以通…

【PTA浙大版《C语言程序设计(第4版)》编程题】练习7-4 找出不是两个数组共有的元素(附测试点)

目录 输入格式: 输出格式: 输入样例: 输出样例: 代码呈现 测试点 给定两个整型数组&#xff0c;本题要求找出不是两者共有的元素。 输入格式: 输入分别在两行中给出两个整型数组&#xff0c;每行先给出正整数N&#xff08;≤20&#xff09;&#xff0c;随后是N个整数&a…

小鱼深度产品测评之:阿里云一键部署幻兽帕鲁,真正1分钟部署,3分钟进入游戏,无限畅玩,双倍快乐。

阿里云一键部署幻兽帕鲁 一、 引言二、 部署过程2.1 进入游戏联机服务专题页2.2 服务购买2.3 服务创建 三、游戏体验3.1 进入Palword3.2 游戏体验3.3 服务器更新3.4 定时备份存档 三、 总结3.1 部署体验3.2 游戏体验 一、 引言 首先。感谢阿里云的运营小姐姐定邀我来参与这次幻…

机器学习 | 如何构建自己的决策树算法?

决策树思想的来源非常朴素&#xff0c;程序设计中的条件分支结构就是if-else结构&#xff0c;最早的决策树就是利用这类结构分割数据的一种分类学习方法 目录 初识决策树 决策树原理 cart剪枝 特征提取 泰坦尼克号乘客生存预测(实操) 回归决策树 初识决策树 决策树是一种…

idea 中 tomcat 乱码问题修复

之前是修改 Tomcat 目录下 conf/logging.properties 的配置&#xff0c;将 UTF-8 修改为 GBK&#xff0c;现在发现不用这样修改了。只需要修改 IDEA 中 Tomcat 的配置就可以了。 修改IDEA中Tomcat的配置&#xff1a;添加-Dfile.encodingUTF-8 本文结束

什么是单例模式与饿汉式单例模式的区别是什么?

什么是单例模式与饿汉式单例模式的区别是什么&#xff1f; 单例模式和饿汉式单例模式都是软件设计模式&#xff0c;它们的区别在于实例的创建时间和线程安全性。 单例模式是一种设计模式&#xff0c;确保一个类只有一个实例&#xff0c;并提供一个全局访问点。单例模式可以保…

嵌入式软件中常见的 8 种数据结构

数据结构是一种特殊的组织和存储数据的方式&#xff0c;可以使我们可以更高效地对存储的数据执行操作。数据结构在计算机科学和软件工程领域具有广泛而多样的用途。 几乎所有已开发的程序或软件系统都使用数据结构。此外&#xff0c;数据结构属于计算机科学和软件工程的基础。当…

pytorch创建tensor

目录 1. 从numpy创建2. 从list创建3. 创建未初始化tensor4. 设置默认tensor创建类型5. rand/rand_like, randint6. randn生成正态分布随机数7. full8. arange/range9. linspace/logspace10. Ones/zeros/eye11. randperm 1. 从numpy创建 2. 从list创建 3. 创建未初始化tensor T…

【iOS ARKit】2D肢体动作捕捉

人体肢体动作捕捉在动漫影视制作、游戏CG 动画、实时模型驱动中有着广泛的应用&#xff0c;利用 ARKit&#xff0c;无须额外的硬件设备即可实现 2D和3D人体一系列关节和骨骼的动态捕捉&#xff0c;由于移动AR 的便携性及低成本&#xff0c;必将促进相关产业的发展。 ARBody Tr…

物流自动化移动机器人|HEGERLS三维智能四向穿梭车助力优化企业供应链

智能化仓库/仓储贯穿于物流的各个环节&#xff0c;不局限于存储、输送、分拣、搬运等单一作业环节的自动化&#xff0c;更多的是利用科技手段实现整个物流供应链流程的自动化与智能化&#xff0c;将传统自动化仓储物流各环节进行多维度的有效融合。 例如在数智化物流仓储的建设…

记录element-plus树型表格的bug

问题描述 如果数据的子节点命名时children,就没有任何问题&#xff0c;如果后端数据结构子节点是其他名字&#xff0c;比如thisChildList就有bug const tableData [{id: 1,date: 2016-05-02,name: wangxiaohu,address: No. 189, Grove St, Los Angeles,selectedAble: true,th…

阿里云一键部署雾锁王国联机服务器详细教程

雾锁王国(Enshrouded)作为一款热门多人在线游戏&#xff0c;为了给玩家提供稳定、流畅的联机体验&#xff0c;阿里云提供了高效便捷的快速部署解决方案&#xff0c;本文将为大家分享阿里云一键部署雾锁王国联机服务器详细教程。 第一步&#xff1a;使用快速部署模板 1、登录阿…

数据湖系列之二 | 打造无限扩展的云存储系统,元数据存储底座的设计和实践

海量数据对数据湖存储的扩展能力提出了极高的要求。元数据面作为云存储最核心、最底层的系统之一&#xff0c;直接决定了存储系统的扩展性。 本文作为数据湖系列的第二篇&#xff0c;将为大家揭开元数据面存储底座的秘密&#xff0c;如何设计能够支撑存储容量的“无限扩展”。…

2024美赛数学建模D题思路分析 - 大湖区水资源问题

1 赛题 问题D&#xff1a;大湖区水资源问题 背景 美国和加拿大的五大湖是世界上最大的淡水湖群。这五个湖泊和连接的水道构成了一个巨大的流域&#xff0c;其中包含了这两个国家的许多大城市地区&#xff0c;气候和局部天气条件不同。 这些湖泊的水被用于许多用途&#xff0…

Unity UGUI Selectable部分源码浅析

private readonly List<CanvasGroup> m_CanvasGroupCache new List<CanvasGroup>();protected override void OnCanvasGroupChanged(){//判断父节点中是否允许交互var groupAllowInteraction true;Transform t transform;while (t ! null){t.GetComponents(m_Ca…

互联网电商平台资金结算的合规处理方案是怎样的?

主要用于电商平台&#xff0c;对电商平台进行流量变现&#xff0c;并对其交易资金进行分账&#xff0c;来达到平台方获取盈利的目的。具体分为二大部分&#xff1a;第一部分&#xff0c;建立银行虚拟账户体系&#xff0c;开通电商平台店铺对应的银行虛拟账户账户&#xff0c;并…

一番赏盲盒小程序系统开发,提高商业价值的新模式

在我国&#xff0c;盲盒市场非常火爆&#xff0c;同时&#xff0c;作为经典玩法的一番赏也同样受到了大众的喜爱。一番赏中会不定时推出不同IP的系列赏品&#xff0c;用户根据概率在赏箱内进行抽赏。 在互联网的发展下&#xff0c;也给一番赏的发展创造了新的机遇。线下市场也…

C#拆分字符串,正则表达式Regex.Split 方法 vs String.Split 方法

目录 一、使用的方法 1.使用Split(String, String)方法 2.String.Split 方法 二、源代码 1.源码 2.生成效果 使用正则表达式可以拆分指定的字符串。同样地&#xff0c;使用字符串对象的Split方法也可以实现此功能。使用字符串对象的Split方法可以根据用户选择的拆分条件&…

jsp自助点餐管理系统Myeclipse开发mysql数据库web结构java编程计算机网页项目

一、源码特点 JSP 自助点餐管理系统是一套完善的java web信息管理系统&#xff0c;对理解JSP java编程开发语言有帮助&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S模式开发。开发环境为 TOMCAT7.0,Myeclipse8.5开发&#xff0c;数据库为Mysql5.0…