第一章|第一章 Spring之旅
Spring简化Java开发的策略
- 基于POJO的轻量级和最小侵入性编程
POJO不需要强迫性地实现Spring规范的接口或者继承Spring规范的类,在基于Spring构建的应用中,它的类通常没有任何痕迹表明你使用了Spring。最坏的场景是,一个类或许会使用到Spring的注解,但它依然是POJO。 - 通过依赖注入和面向接口实现松耦合
耦合是具有两面性的,紧密耦合的代码难以测试、复用和理解。并且典型地出现“打地鼠”式的bug特性(修复一个bug,将会出现一个或者更多新的bug)。另一方面,一定程度的耦合又是必须的—-完全没有耦合的代码什么也做不了。为了完成有实际意义的功能,不同的类必须以适当的方式进行交互。总而言之,耦合是必须的,但应当小心谨慎地管理。
通过DI,对象的依赖关系将由系统中负责协调各对象的第三方组件在创建对象时进行设定。对象无需自行创建或管理他们的依赖关系。如图1.1所示,依赖关系将被自动注入到需要他们的对象当中去。
文章图片
- 基于切面和惯例进行声明式编程
DI能够让相互相互协作的软件组件保持松散耦合,而面向切面编程(AOP)允许你把遍布应用各处的功能分离出来形成重用的组件。
AOP往往被定义为促使软件系统实现关注点分离的一项技术。系统由许多不同的组件组成,每一个组件负责一块特定功能。除了实现自身核心的功能之外,这些组件还经常承担着额外的职责。诸如日志、事务管理和安全这样的系统服务经常融入到自身具有核心业务逻辑的组件中去,这些系统服务通常被称为横切关注点,它们会跨越系统的多个组件。如果将关注点分散到多个组件中去,你的代码将会带来双重的复杂性。图1.2展示了这种复杂性。左边的业务对象与系统级服务结合得过于紧密。每个对象不但要知道它需要记日志、进行安全控制和参与事务,还要亲自执行这些服务。
文章图片
AOP能够使这些服务模块化,并以声明的方式将它们应用到它们需要影响的组件中去。所造成的结果就是这些组件会具有更高的内聚性并且会更加关注自身的业务,完全不需要了解涉及系统服务所带来的复杂性。
如图1.3所示,我们可以把切面想象为覆盖在很多组件上的一个外壳。应用是由那些实现各自业务功能的模块组成的。借助AOP,可以使用各种功能层去包裹核心业务层。这些层以声明的方式灵活地应用到系统中,你的核心应用甚至根本不知道它们的存在。这是一个非常强大的理念,可以将安全、事务和日志关注点与核心业务逻辑相分离。
文章图片
- 通过切面和模板减少样板式代码
Spring旨在通过模板封装来消除样板式代码。如Spring的JdbcTemplate使得执行数据库操作时,避免传统的JDBC样板代码成为了可能。
推荐阅读
- Activiti(一)SpringBoot2集成Activiti6
- 感恩之旅第75天
- SpringBoot调用公共模块的自定义注解失效的解决
- 解决SpringBoot引用别的模块无法注入的问题
- 喵喵
- 【变化】我的青椒学习之旅
- 2018-07-09|2018-07-09 Spring 的DBCP,c3p0
- 游记(缙云仙都、丽水东西岩之旅)
- [成长]“青椒”给我打开了一扇窗——我的青椒学习之旅
- spring|spring boot项目启动websocket