重学 Spring
文章平均质量分 94
Spring 作为Java开发事实上的标准,在项目开发过程中经常会被用到,包括我在内的很多同学对于底层的了解确不是很深,本着力求理解Spring中的各特性的底层实现的态度,在此加以记录。
大鹏cool
good good study, day day up !
展开
-
Spring 参数校验最佳实践及原理解析
在参数校验框架出现前,业务逻辑代码中经常会充斥着参数校验的代码,将参数校验视为业务逻辑的一部分不失为是一种较为灵活的做法,然而对于一些通用的校验,如字符串不能为空、数值范围限制等,如果还放在业务逻辑中,则会导致业务代码出现大量的重复,为了避免这种问题,Java 社区提出了 JSR-303 规范,用于对 bean 进行校验。Spring 框架横空出世后,它又提出了一套更为简单易用的校验接口,校验作为 Spring 的核心特性之一,能够和 Spring 其他组件有机地整合到一起。原创 2021-08-24 16:34:26 · 3466 阅读 · 1 评论 -
MyBatis 与 Spring 整合原理分析
我们常常将 Spring 与 MyBatis 结合在一起使用,由于篇幅问题,上篇《MyBatis 快速整合 Spring》仅介绍了将 MyBatis 整合到 Spring 的方式,这篇在上篇的基础上总结出几个问题,并尝试通过分析其底层源码进行回答。原创 2021-08-10 13:24:41 · 1644 阅读 · 0 评论 -
MyBatis 快速整合 Spring
目前,关系型数据库已经成为 Java 应用的标配,由于 JDBC 操作数据库的复杂性,我们通常会选择一款持久层框架,而作为半自动化 ORM 框架的 MyBatis 则成了我们的首选,而 Spring 又成了 Java 事实上的标准,它让我们开发 Java 应用更快、更容易、更安全,因此我们通常会将 MyBatis 与 Spring 整合在一起使用。原创 2021-08-06 09:29:09 · 328 阅读 · 0 评论 -
那些年面试官问过我的 Spring 事务传播行为
2018年的5月,我从深圳匆匆地来到了上海这座陌生的城市。上海很大,很快我就约到了几个面试,其中一家是某总部在杭州做二手车交易的公司。作为刚毕业一年的小菜鸡,我怀着忐忑的心情走进了这家公司在上海的办公地点,面积不大,大概只有不到300平米。当时会议室已经被占满,我坐在工位上答的笔试题。坐在我旁边的小伙伴好心的提醒了我:**“Spring 事务传播行为你掌握的怎么样?等会很可能会问你这个。”** 纳尼?心中一万个草泥马在奔跑。趁着面试官还没到,我用手机匆匆查了下,当时只记得有7种事务传播行为,但是临时抱佛脚,原创 2021-07-13 17:08:22 · 313 阅读 · 0 评论 -
如何正确打开 Spring 事务?
Spring 事务传播行为是 Spring 中一个常见的面试题,它贯穿于 Spring 的事务管理中,因此想要理解 Spring 事务传播行为,首先要对 Spring 的事务管理有一个整体的认识。本篇先对 Spring 事务的使用加以介绍,后续逐步分析 Spring 事务实现,直至深入理解 Spring 事务传播行为为止。...原创 2021-07-07 11:22:15 · 4072 阅读 · 0 评论 -
Spring AOP @EnableAspectJAutoProxy 实现原理分析
@EnableAspectJAutoProxy 注解是 Spring AOP 框架提供给用户开启 AspectJ 注解支持的一个开关。将其添加到 Spring 配置类上,然后就可以在 Spring Bean 上使用 AspectJ 注解,将 bean 配置为一个 Aspect。本篇将对其实现进行分析,力求达到读者了解其实现流程的目的。原创 2021-06-23 16:26:12 · 765 阅读 · 0 评论 -
Spring AOP 与 AspectJ
目前注解成了应用 Spring 的首选方式。在 Spring AOP 中,Spring 又使用了 AspectJ 的注解,既然 Spring 单独提出一个 AOP 模块,那它为什么自己不提供一套注解?Spring AOP 和 AspectJ 又有何不同?本篇将尝试对这两者的区别与联系进行解释说明。原创 2021-06-22 19:58:04 · 1133 阅读 · 1 评论 -
Spring AOP 的三种使用方式(万字长文)
Spring AOP 作为 Spring Framework 的核心模块,对 Spring IOC 加以补充,Spring 内部使用它提供了企业级的服务,如事务、异步、缓存等,同时它也允许用户自定义 Aspect,以便用 AOP 补充对 OOP 的使用。通常情况下,我们会通过 AspectJ 的注解来使用 Spring AOP,那么 Spring 一共提供了哪些使用 AOP 的方式呢?本篇将对其总结,并尝试了解 Spring AOP 的内部实现。原创 2021-06-21 16:28:47 · 2393 阅读 · 0 评论 -
理解 Spring 应用上下文生命周期
Spring 应用上下文(ApplicationContext),是 Spring 应用的核心接口,也是我们常说的 Spring 容器,除了扩展了基础容器 BeanFactory 还提供了更多企业级的特性,如资源管理、事件发布、国际化等。理解 Spring 应用上下文的生命周期也就理解了 Spring 内部的运行的核心逻辑,生命周期中同时提供了很多扩展点,跟随文章,我们一探究竟。原创 2021-01-19 20:20:20 · 408 阅读 · 0 评论 -
Spring 国际化支持之 MessageSource
Java 对国际化的支持主要是使用 ResourceBundle 根据区域信息选取不同的 properties 文件获取 key 对应的 value,并且 Java 还提供了 MessageFormat 来支持对消息的格式化,Spring 将这两者进行结合,抽象出了 MessageSource 接口,使我们更方便的在 Spring 中获取国际化消息。原创 2020-11-29 22:19:41 · 699 阅读 · 0 评论 -
Spring 循环依赖处理
如果对象A使用到了对象B,那么我们就说对象A依赖对象B。如果对象A依赖对象B的同时,对象B也依赖对象A,我们就说对象A和对象B产生了循环依赖。对于相互依赖的 bean,Spring 是如何处理的呢?本篇将展开分析。原创 2020-11-05 11:23:47 · 284 阅读 · 1 评论 -
Java 面试必备的 Spring Bean 生命周期总结
Spring 作为 IOC 容器,管理的对象称之为 bean,Java 对象在 ClassLoader 中有自己的创建和清理过程,那么 Spring Bean 在容器中也有自己的生命周期。Spring Bean 的生命周期包括从诞生到销毁的整个过程,可以说,理解了 Spring Bean 的声明周期就理解了 Spring 容器对 bean 的管理。原创 2020-10-24 23:39:26 · 841 阅读 · 0 评论 -
认识 Spring 依赖注入中的 @Qualifer
Spring 支持注入单一类型和集合类型的依赖,对于单一类型,如果按照类型进行注入,容器中存在多个相同类型的 bean 时,Spring 将抛出 NoUniqueBeanDefinitionException 异常。此时便需要 @Qualifier 进行处理。原创 2020-10-19 21:34:43 · 1726 阅读 · 0 评论 -
浅析 Spring 依赖解析实现
依赖查找和依赖注入是 Spring IoC 容器的两大能力,对于依赖注入 Spring 需要对依赖进行解析,然后通过反射设置字段或调用方法,本篇我们将重点放到 Spring 如何对依赖注入中的依赖进行解析,了解其实现后我们可以轻易的知道 Spring 中能注入哪些类型的依赖。原创 2020-10-17 21:20:32 · 389 阅读 · 1 评论 -
Spring 依赖注入的方式,你了解哪些?
依赖查找和依赖注入是 Spring 实现 IoC 容器提供的两大特性,相对于依赖查找,Spring 更推崇的是使用依赖注入,本篇先对 Spring 中依赖注入的几种方式进行介绍。原创 2020-10-14 14:58:13 · 275 阅读 · 0 评论 -
Spring 事件处理机制详解,带你吃透 Spring 事件
Spring 事件处理基于 Java 观察者模式扩展。Spring 应用上下文中发布了各种事件,此外 Spring 还允许我们发送和处理自定义的事件,本篇将对 Spring 的事件机制使用及其实现进行详细介绍。原创 2020-10-09 23:49:09 · 4469 阅读 · 1 评论 -
Spring 泛型处理之 ResolvableType
泛型自 Java 5 诞生,为了支持泛型,Java 5 新增了 Type 类,表示 Java 中的某一种类型,反射包中提供的获取泛型类型的方法中多是返回 Type 类型,使用时需要进行强制类型转换,为了简化对泛型信息的获取,Spring 4 开始提供了一个 ResolvableType,本篇将详细对其分析。......原创 2020-10-03 22:25:32 · 6421 阅读 · 7 评论 -
细数 Spring 依赖查找的那些方式
依赖查找和依赖注入是 Spring IOC 容器提供的核心特性,Spring 建议尽量使用依赖注入的方式,另外 Spring 也提供了相关的 API 供用户进行依赖查找,Spring 依赖注入的能力同样依赖于依赖查找,这篇我们将关注 Spring 有哪些依赖查找的方法。原创 2020-09-28 16:00:46 · 580 阅读 · 0 评论 -
Spring 中 @Autowired 和 @Resource 有什么区别?
做为一名 Java 程序员,日常开发中使用最多的便是 Spring,工作了很多年,很多人都停留在使用的层面上,甚至连最基本的概念都没搞懂。鉴于多数人可能对这两者的区别不甚理解,而网上大多数文章又只给出结论,甚至结论中也存在一些错误,因此有必要开一篇文章进行深入分析。原创 2020-09-26 15:28:02 · 1063 阅读 · 4 评论 -
掌握 Spring 必须知道的 BeanDefinition
BeanDefinition 描述了一个 bean 实例具有的构造方法参数和属性值等信息,是 Spring Bean 配置元信息在内存中的表现形式,涉及到 Spring Bean 的整个生命周期,掌握 Spring 必须对 BeanDefinition 进行理解。原创 2020-09-25 10:21:55 · 748 阅读 · 0 评论 -
理解 Spring Bean 的作用域(Scope)
Scope 表示 Spring bean 的作用范围,指明了 bean 的生命周期。Spring 中内置了一些作用域,并且允许我们进行扩展。原创 2020-09-15 17:22:35 · 766 阅读 · 0 评论 -
Spring 中的 Environment 、Profile 与 PropertySource
Environment 由 Spring 3.1 版本提出,表示当前应用的运行时环境。用于管理 Spring 中的条件配置 Profiles 和配置属性源。本篇将详细对其分析。原创 2020-09-13 17:53:01 · 1535 阅读 · 0 评论 -
Spring 框架中的 @Enable* 注解是怎样实现的?
Spring 的项目中,我们经常会使用 @Enable 开头的注解到配置类中,添加了这种注解之后,便会开启一些功能特性。本篇将尝试对其进行分析。原创 2020-09-10 15:32:46 · 1657 阅读 · 0 评论 -
Spring 条件注解 @Conditional 使用及其底层实现
@Conditional 是 spring 4.0 提出的一个新的注解,表示组件在注册到 spring 之前,和指定条件相匹配时才能注册为 Spring 中的 bean。条件由 Spring 的用户通过编程实现,例如如果我们希望某一个 bean 的定义不存在 spring 中或某一个资源存在时才将组件注册为 Spring 中的 bean,我们就可以使用 @Conditional。事实上 SpringBoot 中也大量的使用了 @Conditional 注解,并且将常用的条件抽象为 @ConditionalO原创 2020-09-07 17:34:39 · 5581 阅读 · 0 评论 -
Spring 资源管理 (Resource)
Java 中有各种各样的资源,资源的位置包括本地文件系统、网络、类路径等,资源的形式可以包括文件、二进制流、字节流等,针对不同的资源又有不同的加载形式。本地文件系统中的文件在 Java 中使用 File 表示,使用 FileInputStream 读取。网络上的资源使用 URL 表示,使用 URLConnection 获取 InputStream 进行读取。而类路径下的资源使用 ClassLoader 进行读取。为了使用统一的方式访问资源,Spring 将资源抽象为 Resource,将资源的加载抽象为原创 2020-09-02 22:41:43 · 1641 阅读 · 0 评论 -
Spring 类路径下 Bean 扫描实现分析
要获取类的信息,我们第一反应一般是通过反射获取,因为类加载器将类加载到虚拟机中,会读取 class 文件,而 class 文件中包含着完整的类的信息。那么 Spring 是怎么做的呢?是否还有其他更高效的方式?跟随源码,让我们一探究竟。原创 2020-08-31 23:08:48 · 2051 阅读 · 0 评论 -
Spring 5 启动性能优化之 @Indexed
Spring 经过近20年的发展,目前版本已经迭代到了5.x,每个版本 Spring 都有不同的改进,版本 5.x 中,Spring 把重心放到了性能优化上。我们知道,Spring 注解驱动编程中,Spring 启动时需要对类路径下的包进行扫描,以便发现所需管理的 bean。如果在应用启动前能够确定 Spring bean,不再进行扫描,那么性能就会大大提高,Spring 5 对此进行了实现。原创 2020-08-29 14:02:44 · 5916 阅读 · 0 评论 -
Spring @AliasFor 实现源码分析
Spring 对 Java 中的注解进行了增强,使用组合注解或者属性别名,可以让注解中的属性值覆盖元注解的属性值,并且不同的属性可以互为别名,这样在使用时只需要指定其中一个属性,其别名值也间接进行了提供。这篇便从源码进行入手,尝试分析其内部的实现。原创 2020-08-23 19:25:41 · 999 阅读 · 0 评论 -
Spring 注解编程模型
Spring 自 1.x 版本开始逐渐支持注解,到 3.x 版本进入黄金时期,如今 Spring 已经进入到 5.x 的时代。由于 Java 注解本身的限制,例如 注解无法继承,Spring 对注解也进行了增强,Spring Framework 在 Github Wiki 已经详细的介绍了对注解的增强,Spring 称之为 注解编程模型。翻译 2020-08-16 13:35:59 · 378 阅读 · 0 评论 -
Spring BeanFactory、FactoryBean、ObjectFactory 有何不同?
BeanFactory、FactoryBean、ObjectFactory,这些名称相似的名词事实上在功能上也有一些联系与区别,本文将对此进行总结。原创 2020-07-01 15:53:50 · 758 阅读 · 0 评论 -
Spring FactoryBean 源码分析
日常开发中对FactoryBean的使用并不常见,然而了解FacotryBean可以让我们更清晰的了解spring的底层实现及提供的能力。原创 2020-06-30 14:10:28 · 407 阅读 · 0 评论 -
Spring 基础容器 BeanFactory
BeanFactory作为最基础的容器,主要提供了获取bean的能力。原创 2020-06-29 15:33:22 · 527 阅读 · 0 评论