谈谈SSM框架中的Spring
1.Spring是什么?
Spring是因为理念而不是技术而称为Java世界最为成功的一个框架。
2.让Spring成功的核心理念是什么?
Spring最为核心的理念是IoC(Inversion of Control-控制反转)和AOP(Aspect Oriented Programming-面向切面编程)。
3.Spring的IoC是什么?
为什么我们需要使用Spring?因为我们想要开发程序的时候更简单和更专注。
那么Spring如何帮我们实现这两点的呢?那就是Spring的两个理念IoC和AOP。
IoC是现代产物。很久很久以前我们是“全面人”,那个时候什么都会的人很厉害;如今我们变成了“独面人”,现在对一种技术很“精”的人才厉害。我觉得IoC就是这种理念,将我们从“全面人”解放为“独面人”。让我们对自己不熟悉领域的时候做“伸手党”,向对这个领域专业的人给出自己的描述就获得自己需要的产品,这就让我们开发程序变得更简单。从而我们就节省了大量的时间和精力,就使我们开发自己擅长领域的程序变得更专注。
4.Spring的AOP是什么?
AOP也是现代产物。很久很久以前,我们做一件事要从头做到尾;如今我们做一件事只需要做最核心和最有技术性的部分。举个例子,以前厨师做菜需要先买菜、洗菜、做菜、洗锅;现在厨师只需要做菜。我们可以把这一整套流程总结为:获取原材料(买菜、洗菜)->对原材料进行加工(做菜)这个时候会出现判断,因为做菜会分为成功和失败。如果做成功了,菜就会让服务员端给顾客;如果做失败了,菜会被厨师扔掉。然后洗锅。这个过程其实可以类比我们在程序中应用AOP理念最多的情况,那就是数据库事务。流程如右:获取数据库连接->执行SQL,这个时候会出现判断执行SQL是否发生异常,如果没有发生异常就提交事务;如果发生了异常就回滚事务。最后都会关闭数据库连接。这个过程其实也让厨师的工作变得更简单和更专注。
5.Spring的IoC和AOP的区别是什么?
上面我们自己总结的Spring的IoC和AOP的理念都是让我们开发程序变得更简单和更专注,那么为什么把它们区分为两个理念呢?
这就是我们需要思考的问题,原因就是更简单和更专注是结果导向。IoC和AOP理念的区别在于实现理念的方法不同。
IoC在实现更简单和更专注这个结果时是通过这样一种方法:把我们不熟悉甚至无能为力的功能交给了熟悉和非常专业的人去做,我们只需要找到这个专业的人“class”,给出我们的特殊需求“property”,他们就会给我们一个名称为“id”的产品“bean”。然后我就可以通过名词“id”去使用这个特制的“bean”来实现功能了。然后我们就去开发自己熟悉和非常专业的产品。同样我们的产品在Spring这个大容器中也成为了一个bean和之前我们从别人手中拿来的bean一样,在程序中都会交给Spring这个大容器管理,这就是控制反转(IoC)了。我们自己开发的产品在使用的时候竟然也是Spring这个大容器进行管理的。所以IoC被称为了控制反转。
AOP在实现更简单和更专注这个结果时是通过这样一种方法:把拥有一套固定流程的事情拆分开来,找到最核心的步骤提取出来,其它的步骤固定下来,使得开发人员只需要专注于这个核心步骤的开发。
6.Spring是什么?
Spring是因为IoC和AOP理念而成为Java世界最为成功的框架。
我觉得用简单的话说:Spring的成功是因为“更简单更专注”或者说“专事专干”这个理念而成功的。这也是现代社会和互联网行业得以迅速发展的原因。
7.IoC?!
产生这个理念的需求?!
IoC生活的例子:很久很久以前我们是“全面人”,那个时候什么都会的人很厉害;如今我们变成了“独面人”,现在对一种技术很“精”的人才厉害。我觉得IoC就是这种理念,将我们从“全面人”解放为“独面人”。
IoC开发的例子:电商网站开发,我熟悉商品交易流程,但是对财务不熟悉,而团队中有人对财务处理熟悉,在交易的过程中,商品交易流程需要调用财务的相关接口,才得以实现。我不会自己去开发财务接口,我期望是:①熟悉财务的人去开发财务接口(class)②接口的逻辑尽量简单,内部复杂的业务不需要我自己去了解,我只需要简单调用就能使用③通过简单的描述就能获取这个接口实例且描述应该尽量简单(id和property)。–取自《JavaEE互联网轻量级整合开发》P210-P211
Java开发中更专业的解释?!
IoC是以“更简单更专注”这个基础理念在Java世界里发展而成专业级理念——控制反转。
控制反转(Inversion of Control)是一种通过描述(在Java中可以是XML或者注解)并通过第三方去产生或获取特定对象的方式。实现控制反转的是IoC容器,实现方法是依赖注入(DI反射的形式创建对象)。最大好处是降低对象之间的耦合。绝大多数情况下使用ApplicationContext作为SpringIoC容器。
我们放弃对Bean的控制权,将Bean的控制权完全交给SpringIoC容器
8.AOP?!
产生这个理念的需求?!
通过动态代理技术,将代码织入到对应的流程环节中。
AOP生活的例子:很久很久以前,我们做一件事要从头做到尾;如今我们做一件事只需要做最核心和最有技术性的部分。
9.动态代理
代理必须分为两个步骤:
①代理对象和真实对象之间建立代理关系。
②实现代理对象的代理逻辑方法。
JDK动态代理必须使用接口。
本Markdown编辑器使用StackEdit修改而来,用它写博客,将会带来全新的体验哦:
- Markdown和扩展Markdown简洁的语法
- 代码块高亮
- 图片链接和图片上传
- LaTex数学公式
- UML序列图和流程图
- 离线写博客
- 导入导出Markdown文件
- 丰富的快捷键
快捷键
- 加粗
Ctrl + B
- 斜体
Ctrl + I
- 引用
Ctrl + Q
- 插入链接
Ctrl + L
- 插入代码
Ctrl + K
- 插入图片
Ctrl + G
- 提升标题
Ctrl + H
- 有序列表
Ctrl + O
- 无序列表
Ctrl + U
- 横线
Ctrl + R
- 撤销
Ctrl + Z
- 重做
Ctrl + Y
Markdown及扩展
Markdown 是一种轻量级标记语言,它允许人们使用易读易写的纯文本格式编写文档,然后转换成格式丰富的HTML页面。 —— [ 维基百科 ]
使用简单的符号标识不同的标题,将某些文字标记为粗体或者斜体,创建一个链接等,详细语法参考帮助?。
本编辑器支持 Markdown Extra , 扩展了很多好用的功能。具体请参考Github.
表格
Markdown Extra 表格语法:
项目 | 价格 |
---|---|
Computer | $1600 |
Phone | $12 |
Pipe | $1 |
可以使用冒号来定义对齐方式:
项目 | 价格 | 数量 |
---|---|---|
Computer | 1600 元 | 5 |
Phone | 12 元 | 12 |
Pipe | 1 元 | 234 |
定义列表
-
Markdown Extra 定义列表语法:
项目1
项目2
- 定义 A
- 定义 B 项目3
- 定义 C
-
定义 D
定义D内容
代码块
代码块语法遵循标准markdown代码,例如:
@requires_authorization
def somefunc(param1='', param2=0):
'''A docstring'''
if param1 > param2: # interesting
print 'Greater'
return (param2 - param1 + 1) or None
class SomeClass:
pass
>>> message = '''interpreter
... prompt'''
脚注
生成一个脚注1.
目录
用 [TOC]
来生成目录:
数学公式
使用MathJax渲染LaTex 数学公式,详见math.stackexchange.com.
- 行内公式,数学公式为: Γ(n)=(n−1)!∀n∈N 。
- 块级公式:
更多LaTex语法请参考 这儿.
UML 图:
可以渲染序列图:
或者流程图:
离线写博客
即使用户在没有网络的情况下,也可以通过本编辑器离线写博客(直接在曾经使用过的浏览器中输入write.blog.csdn.net/mdeditor即可。Markdown编辑器使用浏览器离线存储将内容保存在本地。
用户写博客的过程中,内容实时保存在浏览器缓存中,在用户关闭浏览器或者其它异常情况下,内容不会丢失。用户再次打开浏览器时,会显示上次用户正在编辑的没有发表的内容。
博客发表后,本地缓存将被删除。
用户可以选择 把正在写的博客保存到服务器草稿箱,即使换浏览器或者清除缓存,内容也不会丢失。
注意:虽然浏览器存储大部分时候都比较可靠,但为了您的数据安全,在联网后,请务必及时发表或者保存到服务器草稿箱。
浏览器兼容
- 目前,本编辑器对Chrome浏览器支持最为完整。建议大家使用较新版本的Chrome。
- IE9以下不支持
- IE9,10,11存在以下问题
- 不支持离线功能
- IE9不支持文件导入导出
- IE10不支持拖拽文件导入
- 这里是 脚注 的 内容. ↩