SSM学习完后随想之Spring

谈谈SSM框架中的Spring

1.Spring是什么?

Spring是因为理念而不是技术而称为Java世界最为成功的一个框架。

2.让Spring成功的核心理念是什么?

Spring最为核心的理念是IoC(Inversion of Control-控制反转)和AOP(Aspect Oriented Programming-面向切面编程)。

3.Spring的IoC是什么?

为什么我们需要使用Spring?因为我们想要开发程序的时候更简单更专注
那么Spring如何帮我们实现这两点的呢?那就是Spring的两个理念IoCAOP
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

可以使用冒号来定义对齐方式:

项目价格数量
Computer1600 元5
Phone12 元12
Pipe1 元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)=(n1)!nN
  • 块级公式:

x=b±b24ac2a

更多LaTex语法请参考 这儿.

UML 图:

可以渲染序列图:

Created with Raphaël 2.1.0 张三 张三 李四 李四 嘿,小四儿, 写博客了没? 李四愣了一下,说: 忙得吐血,哪有时间写。

或者流程图:

Created with Raphaël 2.1.0 开始 我的操作 确认? 结束 yes no
  • 关于 序列图 语法,参考 这儿,
  • 关于 流程图 语法,参考 这儿.

离线写博客

即使用户在没有网络的情况下,也可以通过本编辑器离线写博客(直接在曾经使用过的浏览器中输入write.blog.csdn.net/mdeditor即可。Markdown编辑器使用浏览器离线存储将内容保存在本地。

用户写博客的过程中,内容实时保存在浏览器缓存中,在用户关闭浏览器或者其它异常情况下,内容不会丢失。用户再次打开浏览器时,会显示上次用户正在编辑的没有发表的内容。

博客发表后,本地缓存将被删除。 

用户可以选择 把正在写的博客保存到服务器草稿箱,即使换浏览器或者清除缓存,内容也不会丢失。

注意:虽然浏览器存储大部分时候都比较可靠,但为了您的数据安全,在联网后,请务必及时发表或者保存到服务器草稿箱

浏览器兼容

  1. 目前,本编辑器对Chrome浏览器支持最为完整。建议大家使用较新版本的Chrome。
  2. IE9以下不支持
  3. IE9,10,11存在以下问题
    1. 不支持离线功能
    2. IE9不支持文件导入导出
    3. IE10不支持拖拽文件导入


  1. 这里是 脚注内容.
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值