
spring
文章平均质量分 88
Java道哥
汲取 传承 打造开源影响力
展开
-
Spring国际化i18n
国际化也称作i18n,其来源是英文单词 internationalization的首末字符i和n,18为中间的字符数。由于软件发行可能面向多个国家,对于不同国家的用户,软件显示不同语言的过程就是国际化(举个例子,人们玩的电子游戏,通常可以选择多个语言版本,适应于多个国家的玩家)。通常来讲,软件中的国际化是通过配置文件来实现的,假设某个软件要支撑两种语言,那么就需要两个版本的配置文件。实现国际化,归根结底就是根据语言类型去定义好字符串模板而已。下表列举了一些常见国家、地区的语言编码:国家/地区。转载 2022-11-22 14:23:54 · 1822 阅读 · 0 评论 -
【有料】Spring Bean 循环依赖为什么需要三级缓存
这里指的是单例的、非构造依赖的循环引用。很多人都知道Spring用了三层缓存来解决循环依赖,但是不知道其原因,为什么是三级缓存?二级缓存不行吗?一级缓存不可以?转载 2022-10-09 16:22:38 · 266 阅读 · 0 评论 -
【有料】高频面试题:Spring 如何解决循环依赖?
结合这两点,也就是说,Spring在实例化一个bean的时候,是首先递归的实例化其所依赖的所有bean,直到某个bean没有依赖其他bean,此时就会将该实例返回,然后反递归的将获取到的bean设置为各个上层bean的属性的。从图中我们可以很清楚的看到,B对象的a属性是在第三步中注入的半成品A对象,而A对象的b属性是在第二步中注入的成品B对象,此时半成品的A对象也就变成了成品的A对象,因为其属性已经设置完成了。读者朋友可能会比较疑惑的是,前面在为对象B设置属性a的时候,这个A类型属性还是个半成品。转载 2022-10-09 16:13:10 · 537 阅读 · 0 评论 -
【有料】Spring的Bean加载流程
这一步就是找到用户自定义的构造函数,然后调用它。① 如果Bean实现了InitializingBean接口,执行afeterPropertiesSet()方法②如果Bean在Spring配置文件中配置了 init-method 属性,则会自动调用其配置的初始化方法。转载 2022-09-22 03:15:54 · 424 阅读 · 0 评论 -
【有料】事务之六:spring 嵌套事务
事务的隔离级别,事务传播行为见《事务之二:spring事务(事务管理方式,事务5隔离级别,7个事务传播行为,spring事务回滚条件) 》package dxz.demo1;@Servicepublic class ServiceAImpl implements ServiceA { @Autowired private ServiceB serviceB; @Autowired private VcSettleMainMapper vcSettleMa转载 2022-06-28 15:28:55 · 2178 阅读 · 0 评论 -
【有料】深入理解Spring循环依赖
所谓循环依赖指的是:BeanA对象的创建依赖于BeanB,BeanB对象的创建也依赖于BeanA,这就造成了死循环,如果不做处理的话势必会造成栈溢出。Spring通过提前曝光机制,利用三级缓存解决循环依赖问题。本节将记录单实例Bean的创建过程,并且仅记录两种常见的循环依赖情况:普通Bean与普通Bean之间的循环依赖,普通Bean与代理Bean之间的循环依赖。Bean创建源码我们先通过源码熟悉下Bean创建过程(源码仅贴出相关部分)。IOC容器获取Bean的入口为AbstractBeanF转载 2022-04-18 22:53:48 · 189 阅读 · 0 评论 -
【有料】深入理解Spring事件发布与监听
在使用Spring构建的应用程序中,适当使用事件发布与监听的机制可以使我们的代码灵活度更高,降低耦合度。Spring提供了完整的事件发布与监听模型,在该模型中,事件发布方只需将事件发布出去,无需关心有多少个对应的事件监听器;监听器无需关心是谁发布了事件,并且可以同时监听来自多个事件发布方发布的事件,通过这种机制,事件发布与监听是解耦的。本节将举例事件发布与监听的使用,并介绍内部实现原理。事件发布监听例子新建springboot应用,boot版本2.4.0,引入如下依赖: 1..转载 2022-04-18 11:29:27 · 242 阅读 · 0 评论 -
【有料】Spring声明式事务原理
在Spring-事务管理一节中,我们了解了在Spring中如何方便的管理数据库事务,并了解了一些和事务相关的专业术语。本节将通过一个简单的例子回顾Spring声明式事务的使用,并通过源码解读内部实现原理,最后通过列举一些常见事务不生效的场景来加深对Spring事务原理的理解。事务例子回顾新建SpringBoot项目,Boot版本2.4.0,然后引入如下依赖: 12345678910111213141516171819 &l转载 2022-04-16 16:34:03 · 123 阅读 · 0 评论 -
【有料】深入理解Spring AOP原理
AOP底层为动态代理,AOP指的是:在程序运行期间动态地将某段代码切入到指定方法指定位置进行运行的编程方式,相关设计模式为代理模式。本节将通过一个简单的例子回顾Spring AOP的使用,并且通过debug源码深入理解内部原理。hints:本节图片较多,加载较慢。回顾Spring AOP的使用新建一个SpringBoot项目,SpringBoot版本为2.4.0,引入如下两个依赖: 12345678910 <dependencies&转载 2022-04-15 00:42:40 · 237 阅读 · 0 评论 -
【有料】深入理解BeanFactoryPostProcessor & BeanDefinitionRegistryPostProcessor
本节主要记录BeanFactoryPostProcessor和BeanDefinitionRegistryPostProcessor的方法执行时机以及简单原理分析。BeanFactoryPostProcessor查看BeanFactoryPostProcessor源码:正在上传…重新上传取消根据注释我们了解到postProcessBeanFactory方法的执行时机为:BeanFactory标准初始化之后,所有的Bean定义已经被加载,但Bean的实例还没被创建(不包括BeanFacto转载 2022-04-13 11:14:52 · 165 阅读 · 0 评论 -
【有料】深入理解Spring BeanPostProcessor & InstantiationAwareBeanPostProcessor
深入学习Spring Bean生命周期一节中,我们学习了Bean后置处理器BeanPostProcessor,用于在Bean初始化前后插入我们自己的逻辑(Bean增强,Bean代理等)。今天偶然接触到BeanPostProcessor的子类InstantiationAwareBeanPostProcessor,用于Bean实例化前后处理。本节记录两者的区别以及简单原理分析。两者比较Initialization为初始化的意思,Instantiation为实例化的意思。在Spring Bean生命周转载 2022-04-12 20:46:06 · 370 阅读 · 0 评论 -
【有料】深入学习Spring Bean生命周期
所谓Spring Bean的生命周期指的是Bean从创建到初始化再到销毁的过程,这个过程由IOC容器管理。一个完整的Bean生命周期可以参考Spring Bean生命周期。这里我们主要记录一些和Bean生命周期相关的细节。Bean的初始化和销毁在整个生命周期过程中,我们可以自定义Bean的初始化和销毁钩子函数,当Bean的生命周期到达相应的阶段的时候,Spring会调用我们自定义的Bean的初始化和销毁方法。自定义Bean初始化和销毁方法有多种方式,下面逐一介绍。@Bean上一节中介绍了转载 2022-04-12 00:27:58 · 78 阅读 · 0 评论 -
【有料】深入学习Spring组件注册
接触过Spring的同学肯定都听过IOC。在传统的Java编程中,当需要用到某个对象的时候,我们都是主动显式创建一个对象实例(new)。使用Spring后就不需要这样做了,因为Spring会帮我们在需要用到某些对象的地方自动注入该对象,而无须我们自己去创建。这种模式俗称控制反转,即IOC(Inversion of Control)。那么Spring是从什么地方获取到我们所需要的对象呢?其实Spring给我们提供了一个IOC容器,里面管理着所有我们需要的对象,组件注册就是我们去告诉Spring哪些类需要...转载 2022-04-11 20:48:24 · 199 阅读 · 0 评论 -
AnnotatedElementUtils.findMergedAnnotation作用
// 在element上查询annotationType类型注解// 将查询出的多个annotationType类型注解属性合并到查询的第一个注解中// # 多个相同注解合并org.springframework.core.annotation.AnnotatedElementUtils#findMergedAnnotation(AnnotatedElement element, Class<A> annotationType)转自:AnnotatedElementUtils.f.转载 2022-03-17 14:41:11 · 1770 阅读 · 0 评论 -
SpringBoot 中 @Value 源码解析
1、引言在之前的《SpringBoot 自动装配》文章中,我介绍了ConfigurationClassPostProcessor这个类,它是 SpringBoot 作为扩展 Spring 一系列功能的基础路口,它所衍生的ConfigurationClassParser作为解析职责的基本处理类,涵盖了各种解析处理的逻辑,如@Configuration、@Bean、@Import、@ImportSource、@PropertySource、@ComponentScan等注解都在这个解析类中完成。由于Conf转载 2022-02-08 23:30:54 · 1061 阅读 · 0 评论 -
【有料】DUBBO配置规则详解
#DUBBO配置规则详解#欢迎加入DUBBO交流群:259566260研究DUBBO也已经大半年了,对它的大部分源码进行了分析,以及对它的内部机制有了比较深入的了解,以及各个模块的实现。DUBBO包含很多内容,如果想了解DUBBO第一步就是启动它,从而可以很好的使用它,那么如何更好的使用呢?就需要知道DUBBO的各个配置项,以及它可以通过哪些途径进行配置。个人对配置的理解,就好比时对动物的驯服,如何很好的驯服一头猛兽,那就需要知道它各种习性,从而调整,已达到自己期望的结果。这篇不对DUBBO有哪转载 2021-12-03 00:05:11 · 830 阅读 · 0 评论 -
【有料】基于Spring可扩展Schema提供自定义配置支持(spring配置文件中 配置标签支持)
在很多情况下,我们需要为系统提供可配置化支持,简单的做法可以直接基于Spring的标准Bean来配置,但配置较为复杂或者需要更多丰富控制的时候,会显得非常笨拙。一般的做法会用原生态的方式去解析定义好的xml文件,然后转化为配置对象,这种方式当然可以解决所有问题,但实现起来比较繁琐,特别是是在配置非常复杂的时候,解析工作是一个不得不考虑的负担。Spring提供了可扩展Schema的支持,这是一个不错的折中方案,完成一个自定义配置一般需要以下步骤:设计配置属性和JavaBean编写XSD文件编写Name转载 2021-11-18 11:37:07 · 117 阅读 · 0 评论 -
XSD - <schema> 元素
<schema> 元素是每一个 XML Schema 的根元素。<schema> 元素<schema> 元素是每一个 XML Schema 的根元素:<?xml version="1.0"?><xs:schema>......</xs:schema><schema> 元素可包含属性。一个 schema 声明往往看上去类似这样:<?xml version="1.0"?> &转载 2021-11-17 17:27:07 · 322 阅读 · 0 评论 -
spring中bean配置和bean注入
1 bean与spring容器的关系Bean配置信息定义了Bean的实现及依赖关系,Spring容器根据各种形式的Bean配置信息在容器内部建立Bean定义注册表,然后根据注册表加载、实例化Bean,并建立Bean和Bean的依赖关系,最后将这些准备就绪的Bean放到Bean缓存池中,以供外层的应用程序进行调用。1 bean配置bean配置有三种方法:基于xml配置Bean 使用注解定义Bean 基于java类提供Bean定义信息1.1 基于xml配置Bean对于基于XML的.转载 2021-07-18 01:47:57 · 953 阅读 · 0 评论 -
Spring基础篇——Spring容器和应用上下文理解
上文说到[回看],有了Spring之后,通过依赖注入的方式,我们的业务代码不用自己管理关联对象的生命周期。业务代码只需要按照业务本身的流程,走啊走啊,走到哪里,需要另外的对象来协助了,就给Spring说,我想要个对象——于是Spring就很贴心的给你个对象。听起来似乎很简单,使用起来也不难,但是如果仅仅是这样的拿来主义,倒也洒脱,不用费什么脑子。。。可是,你就真的不关心,Spring是从哪里把对象给你的吗? 如果你想要了解Spring深一些,而不仅仅是拿来用用,那么你就应该好好思考一下上诉问题,不然,转载 2021-07-05 21:28:39 · 504 阅读 · 0 评论 -
@Component, @Repository, @Service的区别
@Component, @Repository, @Service的区别官网引用引用spring的官方文档中的一段描述:在Spring2.0之前的版本中,@Repository注解可以标记在任何的类上,用来表明该类是用来执行与数据库相关的操作(即dao对象),并支持自动处理数据库操作产生的异常在Spring2.5版本中,引入了更多的Spring类注解:@Component,@Service,@Controller。@Component是一个通用的Spring容器管理的单例bean组件。而@R转载 2021-07-05 17:03:31 · 178 阅读 · 0 评论 -
Spring注解@Resource和@Autowired区别对比
@Resource和@Autowired都是做bean的注入时使用,其实@Resource并不是Spring的注解,它的包是javax.annotation.Resource,需要导入,但是Spring支持该注解的注入。1、共同点两者都可以写在字段和setter方法上。两者如果都写在字段上,那么就不需要再写setter方法。2、不同点(1)@Autowired@Autowired为Spring提供的注解,需要导入包org.springframework.beans.factory.ann转载 2021-07-05 16:49:42 · 148 阅读 · 0 评论 -
spring的自定义标签都不会?你可能只学到了spring的皮毛
通常我们在applicationContext.xml文件中使用spring的标签时,会发现spring默认支持的只有5种,如图所示那么问题来了,spring有那么多的功能,只用这5种标签能够全都实现吗?答案是否定的,肯定不不能。于是,自定义标签的功能闪亮登场。我们以自定义的context标签为例子。大家知道如果直接在配置文件中引入context标签的元素,会在编辑器中有红色警告,如图这个时候就需要引入命名空间,我们到spring-context-xxx.jar的ME..转载 2021-04-21 01:21:43 · 271 阅读 · 0 评论 -
@Valid 注解用法详解
@Valid 注解通常用于对象属性字段的规则检测,具体啥意思,下面让我娓娓道来:下面我们以新增一个员工为功能切入点,以常规写法为背景,慢慢烘托出 @Valid 注解用法详解。那么,首先,我们会有一个员工对象 Employee,如下 :/*** 员工对象** @author sunnyzyq* @since 2019/12/13*/public class Employee { /** 姓名 */ public String name; ...转载 2021-03-09 21:39:59 · 903 阅读 · 0 评论 -
Spring 源码学习(三)自定义标签
看了这篇,自定义 Spring 标签不是梦~又来填坑啦,上一篇讲完默认标签的解析,这篇笔记记录一下自定义标签的解析吧。我们知道,Spring 源码的核心模块是 Spring-core 和 Spring-beans,在此基础上衍生出其他模块,例如 context、 cache、 tx 等模块,都是根据这两个基础模块进行扩展的。聪明如你,应该想到我们代码中常用的缓存注解 @Cacheable、事务注解 @Transaction,还有阿里巴巴的 RPC 中间件 Dubbo,在配置文件中通过 <d转载 2021-02-22 20:45:01 · 155 阅读 · 0 评论 -
彻底搞懂Java注解Annotation(含注解的定义 原则 作用)
注解的定义定义注解:提供一种为程序元素设置元数据的方法。基本原则:注解不能直接干扰程序代码的运行,无论增加或删除注解,代码都能够正常运行。注解(也被成为元数据)为我们在代码中添加信息提供了一种形式化的方法,使我们可以在稍后某个时刻非常方便地使用这些数据。 ———摘自《Thinking in Java》简单来说注解的作用就是将我们的需要的数据储存起来,在以后的某一个时刻(可能是编译时,也可能是运行时)去调用它。元数据元数据:就是关于数据的数据元数据的作用: ..转载 2021-01-14 16:35:15 · 357 阅读 · 0 评论 -
深入理解Java:注解(Annotation)自定义注解入门
要深入学习注解,我们就必须能定义自己的注解,并使用注解,在定义自己的注解之前,我们就必须要了解Java为我们提供的元注解和相关定义注解的语法。元注解: 元注解的作用就是负责注解其他注解。Java5.0定义了4个标准的meta-annotation类型,它们被用来提供对其它 annotation类型作说明。Java5.0定义的元注解: 1.@Target, 2.@Retention, 3.@Documented, 4.@Inherited 这些类型和它们所支持的类转载 2021-01-14 16:19:37 · 114 阅读 · 0 评论 -
java元注解 @Target注解用法
@Target: @Target说明了Annotation所修饰的对象范围:Annotation可被用于 packages、types(类、接口、枚举、Annotation类型)、类型成员(方法、构造方法、成员变量、枚举值)、方法参数和本地变量(如循环变量、catch参数)。在Annotation类型的声明中使用了target可更加明晰其修饰的目标。 作用:用于描述注解的使用范围(即:被描述的注解可以用在什么地方) 取值(ElementType)有 1 2 3转载 2021-01-14 14:01:12 · 471 阅读 · 0 评论 -
注解@Retention的作用
注解@Retention可以用来修饰注解,是注解的注解,称为元注解。Retention注解有一个属性value,是RetentionPolicy类型的,Enum RetentionPolicy是一个枚举类型,这个枚举决定了Retention注解应该如何去保持,也可理解为Rentention 搭配 RententionPolicy使用。RetentionPolicy有3个值:CLASS RUNTIME SOURCE按生命周期来划分可分为3类:1、RetentionPolicy.SOURCE:注解...转载 2021-01-14 11:29:38 · 200 阅读 · 0 评论 -
Spring基础篇——DI/IOC和AOP原理初识
前言 作为从事java开发的码农,Spring的重要性不言而喻,你可能每天都在和Spring框架打交道。Spring恰如其名的,给java应用程序的开发带了春天般的舒爽感觉。Spring,可以说是任何一个java开发者通往技术高阶的必备基础。当然,要学好Spring,尤其是了解Spring的底层原理并不容易,需要花费很多时间和精力来潜心的研习,并在实际的项目中不断的试错和总结,才能形成属于自己的思维理解。博主对Spring最初的认识颇浅,项目中遇到问题依靠度娘大概也能笼而统之的解决。不过呢,接触Spr转载 2020-11-14 22:14:23 · 134 阅读 · 0 评论 -
java----spring框架
什么是spring框架? Spring 是一个开源框架,是一种整合性的框架,是为了解决企业应用程序开发复杂性而创建的。框架的主要优势之一就是其分层架构,分层架构允许您选择使用哪一个组件,同时为 J2EE 应用程序开发提供集成的框架。至03年spring框架发布以来到现在pring框架已经发展成JavaEE开发中的非常重要的一个框架。虽然还是有公司采用自己的方式来处理代码间的耦合问题,但是他们采用的方式依旧是Spring框架的基础,即:工厂模式与服务定位器模式等。 Spring是为企业应用开发提供转载 2020-11-14 22:12:18 · 118 阅读 · 0 评论 -
Spring核心接口之InitializingBean
一、InitializingBean接口说明InitializingBean接口为bean提供了属性初始化后的处理方法,它只包括afterPropertiesSet方法,凡是继承该接口的类,在bean的属性初始化后都会执行该方法。package org.springframework.beans.factory;/** * Interface to be implemented by...转载 2020-03-20 23:31:09 · 136 阅读 · 0 评论 -
@bean和@component的理解
Spring帮助我们管理Bean分为两个部分,一个是注册Bean,一个装配Bean。完成这两个动作有三种方式,一种是使用自动配置的方式、一种是使用JavaConfig的方式,一种就是使用XML配置的方式。在自动配置的方式中,使用@Component去告诉Spring,我是一个bean,你要来管理我,然后使用@AutoWired注解去装配Bean(所谓装配,就是管理对象直接的协作关系)。然后在J...转载 2019-09-04 20:38:23 · 1981 阅读 · 0 评论