一. Spring 最本质的使命
简化JAVA开发
为了简化JAVA开发的复制性,采取了四种关键策略:
- 基于POJO的轻量级和最小侵入性编程;
- 通过依赖注入和面向接口实现松耦合;
- 基于切面和惯例进行声明式编程;
- 通过切面和模板减少样板式代码。
二. 依赖注入
1. 什么是依赖:
任何一个有实际意义的应用(肯定比Hello World示例更复杂) 都会由两个或者更多的类组成, 这些类相互 之间进行协作来完成特定的业务逻辑。
2. 依赖注入的目的是?
编写 松耦合,高聚合的代码。
3. 如何实现?
可以使用 xml 的方式,或者 使用 基于JAVA 的配置。
三. 面向切面编程
1. 什么是面向切面编程?
面向切面编程往往被定义为促使软件系统实现关注点的分离一项技术。 系统由许多不同的组件组成, 每一个组件各负责一块特定功能。 除了实现自身核心的功能之外, 这些组件还经常承担着额外的职责。
2. 用途
日志、 事务管理和安全这样的系统服务经常融入到自身具有核心业务逻辑的组件中去, 这些系统服务通常被称为横切关注点, 因为它们会跨越系统的多个组件。
3. 如果不使用面向切面编程的后果
- 实现系统关注点功能的代码将会重复出现在多个组件中。 这意味着如果你要改变这些关注点的逻辑, 必须修改各个模块中的相关实现。即使你把这些关注点抽象为一个独立的模块, 其他模块只是调用它的方法, 但方法的调用还是会重复出现在各个模块中。
- 组件会因为那些与自身核心业务无关的代码而变得混乱。 一个向地址簿增加地址条目的方法应该只关注如何添加地址, 而不应该关注它是不是安全的或者是否需要支持事务。
没有使用 AOP 之前的系统:
使用 AOP 的系统:
4. 好处
AOP能够使这些服务模块化, 并以声明的方式将它们应用到它们需要影响的组件中去。 所造成的结果就是这些组件会具有更高的内聚性并且会 更加关注自身的业务, 完全不需要了解涉及系统服务所带来复杂性。 总之, AOP能够确保POJO的简单性。
5. 实现
JAVA 里面使用 xml 配置文件的方式去实现AOP。Python 使用装饰器的方式。
切入点的定义和使用:
- 先定义一个切入点。
- 前置通知和后置通知。
例如这样的一个伪代码:
# 执行之前做一些事情
# 将要执行的函数
# 执行之后做一些事情
4. 消除样板代码
1. 什么是样板代码?
不想多说,JAVA 的 JDBC 懂的人都懂。为了查询一条数据,做一大波其他操作。
2. 如何做?
使用模板, 什么是模板呢? 我感觉了解一下就可以了。后面应该使用不到的,或者很少用到。
理由: 使用模板虽然简化了很多代码,但是 我看到了 原生的 SQL语句,这种以我之前的经验来看,肯定有更好的东西,可以不同写 原生 SQL 语句。
网友评论