《Spring技术内幕》——第一部分

简介: 本节书摘来自华章社区《Spring技术内幕》一书中的第一部分,作者:计文柯,更多章节内容可以访问云栖社区“华章社区”公众号查看

第一部分
Spring核心实现篇
第2章 Spring Framework的核心:IoC容器的实现
第3章 Spring AOP的实现
本篇将对Spring的核心IoC容器和AOP的实现原理进行阐述。IoC容器和AOP是Spring的核心,它们是Spring系统中其他组件模块和应用开发的基础。通过这两个核心模块的设计和实现可以了解Spring倡导的对企业应用开发所应秉持的思路,比如使用POJO开发企业应用,提供一致的编程模型,强调对接口编程等。对于这些Spring背后的开发思想和设计理念,大家都不会陌生,在Rod Johnson的经典著作中都有全面而深刻的讲解。作为参考,我们可以查看Spring官方网站对Spring项目的描述。如下图所示,Spring的目标和愿景写得很清楚。
首先,Spring的目标在于让Java EE的开发变得更容易,这就意味着Spring框架的使用也应该是容易的。对于开发人员而言,易用性是第一位的。为什么要让Java EE开发变得更容易,难道以前的Java EE开发很艰难?Spring究竟是如何让Java EE的开发变得更容易的呢?了解Java EE开发历史的读者都知道,正如Rod Johnson在他的著作《Expert One-on-One Java EE Design and Development》中提到的那样,EJB模型为Java EE开发引入了过度的复杂性,这个开发模型对Java EE的开发并不友好。有没有更好的开发模型呢?有,那就是基于POJO和简单的Java环境直接开发应用。这种开发模式,让Java洗净铅华,恢复自然风采。 使用POJO不仅能开发复杂的Java企业应用,还可以让Java EE开发在开发成本、开发周期、可维护性和性能上取得更大优势。对一般的企业应用需求而言,重要的是如何方便地使用应用所需要的服务,而不是各种各样的开发模型和模式。
Java语言自面世以来,以简洁而开放的特性,吸引了众多开发者、社区和商业公司的注意,从语言环境本身来看,它不但具有面向对象的语言特性,还具有跨平台的虚拟环境,使其在企业开发领域有独特的优势。但是,随着Java的发展,在开发企业应用时,有技术规范凌驾于应用需求的趋势,比如,在EJB的开发模式中,体现了技术规范实现的复杂性,但是对应用需求关注不足。在这个时候,Spring出现了,给人的第一印象是简洁而又具有丰富的内涵,就像第一次遇到Java一样,这种特质深深地吸引了开发者。Spring降低了企业应用开发的门槛,还原了POJO的本色,让开发者直接依赖于Java语言,直接依赖于面向对象编程,使用无所不在的单元测试来保证代码质量,使开发者有信心开发出高质量的企业应用。
我们如何才能既让开发变得容易,又能享受到Java EE提供的各种服务呢?Spring的目标就是通过自己的努力,让用户体会到这种简单之中的强大。同时,作为应用框架,Spring不想作为另外一种复杂开发模型的替代,也就是说不想用另一种复杂性去替代现有的复杂性,那是换汤不换药,并不能解决问题。这就意味着需要有新的突破。要解决这个问题,需要降低应用的负载和框架的侵入性,Spring是怎样做到这一点的呢?
Spring为我们提供的解决方案就是IoC容器和AOP支持。作为依赖反转模式的具体实现,IoC容器很好地降低了框架的侵入性,也可以认为依赖反转模式是Spring体现出来的核心模式。这些核心模式是软件架构设计中非常重要的因素,我们常常看到的MVC模式就是这样的核心模式。使用好这些核心模式,就像我们在Web应用中使用MVC模式一样,可以获得非常大的便利。
Spring核心的模式实现,是为应用提供IoC容器和AOP框架,从而在企业应用开发中引入新的核心模式,并使用户的开发方式发生很大的变化,具体来说,就是使用POJO来完成开发,在简化用户开发的同时,依然能够使用强大的服务,能够实现复杂的企业应用的开发需求。比如对于依赖反转,在Spring中,我们看到的就是,Java EE的服务都被抽象到IoC容器中,并通过AOP进行有效的封装,因为依赖注入的特性,这些复杂的依赖关系的管理被反转并被交给容器,使复杂的依赖关系管理从应用中解放出来了。
在Spring中,各个模块的依赖关系通过简单的IoC配置文件进行描述,使这些外部化的信息集中并且明了。我们在使用其他组件服务时,只需要去配置文件中了解和配置这些依赖关系即可,也就是说这里关心的是接口,至于服务的具体实现,在使用接口定义隔离开以后,并不是应用开发关心的重点。对应用开发而言,只需要了解服务的接口和依赖关系的配置即可。这样一来,可以很好地体现Spring的第二个信条:让应用开发对接口编程,而不是对类编程。这样POJO使用Java EE服务时,可以将对这些服务实现的依赖降到最低, 同时尽可能降低框架对应用的侵入性。
在处理与现有优秀解决方案的关系时,按照Spring的既定策略,它不会与第三方的解决方案进行竞争,而是致力于为应用提供使用优秀方案的集成平台。真正地把Spring定位在应用平台的地位,使Spring成为一个兼容并包的开放体系的同时,最大程度降低开发者对Spring API的依赖,这是怎样实现的呢?答案还是IoC容器和AOP技术,也就是说,Spring API在开发过程中并不是必须使用的。对具体的服务实现,Spring是开源软件和模块化的应用平台,虽然具体的服务是以Spring作为开发平台的,但是客户依然有很大的具体技术方案的选择权,可以根据应用自身的特点选择技术方案以支持应用需求的实现。IoC和AOP这两个核心组件,特别是IoC容器,是用户在使用Spring完成POJO应用开发的过程中必须使用的。这样的应用策略也极大地扩展了Spring的应用场合,不仅包括Java EE应用,还包括其他方面的应用,如桌面应用等。从这个意义上来讲,IoC容器称得上是Spring的最核心部分。

相关文章
|
3月前
|
开发框架 负载均衡 Java
当热门技术负载均衡遇上 Spring Boot,开发者的梦想与挑战在此碰撞,你准备好了吗?
【8月更文挑战第29天】在互联网应用开发中,负载均衡至关重要,可避免单服务器过载导致性能下降或崩溃。Spring Boot 作为流行框架,提供了强大的负载均衡支持,通过合理分配请求至多台服务器,提升系统可用性与可靠性,优化资源利用。本文通过示例展示了如何在 Spring Boot 中配置负载均衡,包括添加依赖、创建负载均衡的 `RestTemplate` 实例及服务接口调用等步骤,帮助开发者构建高效、稳定的应用。随着业务扩展,掌握负载均衡技术将愈发关键。
78 6
|
1月前
|
存储 Java API
简单两步,Spring Boot 写死的定时任务也能动态设置:技术干货分享
【10月更文挑战第4天】在Spring Boot开发中,定时任务通常通过@Scheduled注解来实现,这种方式简单直接,但存在一个显著的限制:任务的执行时间或频率在编译时就已经确定,无法在运行时动态调整。然而,在实际工作中,我们往往需要根据业务需求或外部条件的变化来动态调整定时任务的执行计划。本文将分享一个简单两步的解决方案,让你的Spring Boot应用中的定时任务也能动态设置,从而满足更灵活的业务需求。
89 4
|
5月前
|
XML Java 数据格式
技术好文:Spring基础篇——AOP切面编程
技术好文:Spring基础篇——AOP切面编程
|
2月前
|
存储 缓存 Java
在Spring Boot中使用缓存的技术解析
通过利用Spring Boot中的缓存支持,开发者可以轻松地实现高效和可扩展的缓存策略,进而提升应用的性能和用户体验。Spring Boot的声明式缓存抽象和对多种缓存技术的支持,使得集成和使用缓存变得前所未有的简单。无论是在开发新应用还是优化现有应用,合理地使用缓存都是提高性能的有效手段。
39 1
|
2月前
|
前端开发 安全 Java
技术进阶:使用Spring MVC构建适应未来的响应式Web应用
【9月更文挑战第2天】随着移动设备的普及,响应式设计至关重要。Spring MVC作为强大的Java Web框架,助力开发者创建适应多屏的应用。本文推荐使用Thymeleaf整合视图,通过简洁的HTML代码提高前端灵活性;采用`@ResponseBody`与`Callable`实现异步处理,优化应用响应速度;运用`@ControllerAdvice`统一异常管理,保持代码整洁;借助Jackson简化JSON处理;利用Spring Security增强安全性;并强调测试的重要性。遵循这些实践,将大幅提升开发效率和应用质量。
64 7
|
3月前
|
缓存 NoSQL Java
SpringBoot的三种缓存技术(Spring Cache、Layering Cache 框架、Alibaba JetCache 框架)
Spring Cache 是 Spring 提供的简易缓存方案,支持本地与 Redis 缓存。通过添加 `spring-boot-starter-data-redis` 和 `spring-boot-starter-cache` 依赖,并使用 `@EnableCaching` 开启缓存功能。JetCache 由阿里开源,功能更丰富,支持多级缓存和异步 API,通过引入 `jetcache-starter-redis` 依赖并配置 YAML 文件启用。Layering Cache 则提供分层缓存机制,需引入 `layering-cache-starter` 依赖并使用特定注解实现缓存逻辑。
996 1
SpringBoot的三种缓存技术(Spring Cache、Layering Cache 框架、Alibaba JetCache 框架)
|
2月前
|
JavaScript 前端开发 Java
【颠覆传统】Spring框架如何用WebSocket技术重塑实时通信格局?揭秘背后的故事与技术细节!
【9月更文挑战第4天】随着Web应用对实时交互需求的增长,传统的HTTP模型已无法满足现代应用的要求,特别是在需要持续、双向通信的场景下。WebSocket协议由此诞生,提供全双工通信渠道,使服务器与客户端能实时互发消息。作为Java开发中最受欢迎的框架之一,Spring通过其WebSocket模块支持这一协议,简化了WebSocket在Spring应用中的集成。
57 0
|
3月前
|
前端开发 Java Spring
Spring与Angular/React/Vue:当后端大佬遇上前端三杰,会擦出怎样的火花?一场技术的盛宴,你准备好了吗?
【8月更文挑战第31天】Spring框架与Angular、React、Vue等前端框架的集成是现代Web应用开发的核心。通过RESTful API、WebSocket及GraphQL等方式,Spring能与前端框架高效互动,提供快速且功能丰富的应用。RESTful API简单有效,适用于基本数据交互;WebSocket支持实时通信,适合聊天应用和数据监控;GraphQL则提供更精确的数据查询能力。开发者可根据需求选择合适的集成方式,提升用户体验和应用功能。
92 0
|
3月前
|
Java 数据库连接 数据库
告别繁琐 SQL!Hibernate 入门指南带你轻松玩转 ORM,解锁高效数据库操作新姿势
【8月更文挑战第31天】Hibernate 是一款流行的 Java 持久层框架,简化了对象关系映射(ORM)过程,使开发者能以面向对象的方式进行数据持久化操作而无需直接编写 SQL 语句。本文提供 Hibernate 入门指南,介绍核心概念及示例代码,涵盖依赖引入、配置文件设置、实体类定义、工具类构建及基本 CRUD 操作。通过学习,你将掌握使用 Hibernate 简化数据持久化的技巧,为实际项目应用打下基础。
199 0
|
3月前
|
Java 前端开发 Spring
技术融合新潮流!Vaadin携手Spring Boot、React、Angular,引领Web开发变革,你准备好了吗?
【8月更文挑战第31天】本文探讨了Vaadin与Spring Boot、React及Angular等主流技术栈的最佳融合实践。Vaadin作为现代Java Web框架,与其他技术栈结合能更好地满足复杂应用需求。文中通过示例代码展示了如何在Spring Boot项目中集成Vaadin,以及如何在Vaadin项目中使用React和Angular组件,充分发挥各技术栈的优势,提升开发效率和用户体验。开发者可根据具体需求选择合适的技术组合。
75 0
下一篇
无影云桌面