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.hqwc.cn/news/449511.html

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

相关文章

LabVIEW核能设施监测

LabVIEW核能设施监测 在核能领域&#xff0c;确保设施运行的安全性和效率至关重要。LabVIEW通过与硬件的紧密集成&#xff0c;为高温气冷堆燃料装卸计数系统以及脉冲堆辐射剂量监测与数据管理系统提供了解决方案。这些系统不仅提高了监测和管理的精确度&#xff0c;也保证了核…

Java SWT Composite 绘画

Java SWT Composite 绘画 1 Java SWT2 Java 图形框架 AWT、Swing、SWT、JavaFX2.1 Java AWT (Abstract Window Toolkit)2.2 Java Swing2.3 Java SWT (Standard Widget Toolkit)2.4 Java JavaFX 3 比较和总结 1 Java SWT Java SWT&#xff08;Standard Widget Toolkit&#xff…

【毕业快刊】录用率98%!IF将破7,中科院2区,2个月录用,6天见刊,36天检索!

计算机类 ● 高分快刊 今天带来Elsevier旗下快刊解读&#xff0c;影响因子将破7&#xff0c;2023中科院分区上涨至中科院2区&#xff0c;期刊实力强劲&#xff0c;审稿快&#xff0c;实为毕业投稿首选&#xff0c;如有投稿意向可重点关注&#xff0c;具体详情见下文&#xff1…

不用苦苦寻觅!这是大模型检索增强生成(RAG)最全综述!

文章目录 一、背景二、摘要技术交流用通俗易懂的方式讲解系列三、RAG 框架3.1. Naive RAG3.1.1. Naive RAG 方案3.1.2. Naive RAG 不足 3.2. Advanced RAG3.2.1. Advanced RAG 方案3.2.2. Pre-Retrieval Process3.2.3. Post-Retrieval Process 3.3. Modular RAG3.3.1. Advanced…

【开源】JAVA+Vue.js实现学生日常行为评分管理系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、系统设计2.1 功能模块设计2.2.1 登录注册模块2.2.2 用户管理模块2.2.3 评分项目模块2.2.4 评分数据模块2.2.5 数据字典模块 2.3 可行性设计2.4 用例设计2.5 数据库设计2.5.1 整体 E-R 图2.5.2 用户2.5.3 评分项目2.5.4 评分数据2.5.…

Java实现视频抽帧

&#x1f913; 1️⃣配置Maven 在pox.xml中加入 <dependencies><dependency><groupId>org.bytedeco</groupId><artifactId>javacv-platform</artifactId><version>1.5.7</version></dependency> </dependencies…

短剧小程序开发:打造高效、便捷的娱乐体验

随着移动互联网的普及和用户需求的多样化&#xff0c;短剧小程序作为一种新型的应用形态&#xff0c;逐渐受到了广大用户的青睐。短剧小程序开发旨在为用户提供一种高效、便捷的娱乐体验&#xff0c;让用户在忙碌的生活中轻松享受到精彩的短剧内容。本文将探讨短剧小程序开发的…

卡诺图:逻辑相邻与几何相邻的统一

文章目录 1.一句话记住卡诺图2.卡诺图的由来、定义和特点3.填写卡诺图&#xff08;用卡诺图表示逻辑函数&#xff09;⑴根据真值表填写卡诺图⑵根据最小项&#xff08;或最大项&#xff09;填写卡诺图⑶根据函数的与或表达式填写卡诺图 4.用卡诺图化简逻辑函数⑴化简步骤⑵画圈…

如何部署Node.js服务并实现无公网ip远程访问本地项目【内网穿透】

文章目录 前言1.安装Node.js环境2.创建node.js服务3. 访问node.js 服务4.内网穿透4.1 安装配置cpolar内网穿透4.2 创建隧道映射本地端口 5.固定公网地址 前言 Node.js 是能够在服务器端运行 JavaScript 的开放源代码、跨平台运行环境。Node.js 由 OpenJS Foundation&#xff0…

面试150 位1的个数 位运算

Problem: 191. 位1的个数 文章目录 思路复杂度Code 思路 &#x1f468;‍&#x1f3eb; 参考 复杂度 Code public class Solution {// you need to treat n as an unsigned valuepublic int hammingWeight(int n){int res 0;while (n ! 0){res 1;n & n - 1;// 把最后…

十分钟上手vue!

Vue 是一款用于构建用户界面的 JavaScript 框架。它基于标准 HTML、CSS 和 JavaScript 构建&#xff0c;并提供了一套声明式的、组件化的编程模型&#xff0c;帮助你高效地开发用户界面。无论是简单还是复杂的界面&#xff0c;Vue 都可以胜任。 一 vue.js的导入及使用 vue安装…

NLP入门系列—Attention 机制

NLP入门系列—Attention 机制 Attention 正在被越来越广泛的得到应用。尤其是 [BERT]火爆了之后。 Attention 到底有什么特别之处&#xff1f;他的原理和本质是什么&#xff1f;Attention都有哪些类型&#xff1f;本文将详细讲解Attention的方方面面。 Attention 的本质是什…