原文链接

Spring是什么

先说一个Spring是什么吧,大家都是它是一个框架,但框架这个词对新手有点抽象,以致于越解释越模糊,不过它确实是个框架的,但那是从功能的角度来定义的,从本质意义上来讲,Spring是一个库,一个Java库,所以我个人觉得应该这样回答Spring是什么:Spring是一个库,它的功能是提供了一个软件框架,这个框架目的是使软件之间的逻辑更加清晰,配置更灵活,实现这个目的的手段使用AOP和IoC,而AOP和IoC是一种思想,是一种什么样的思想呢,等下细说,先说AOP在Java里是利用反射机制实现(你也可以认为是动态代理,不过动态代理也是反射机制实现的,所以还是先不要管动态代理,我们这里化繁为简,不让它干扰咱们对AOP的理解),如何使用AOP呢,很简单滴,等下介绍。

Aop是什么

下面先说AOP是什么样的思想,我们一步一步慢慢来,先看一下传统程序的流程,比如银行系统会有一个取款流程

我们可以把方框里的流程合为一个,另外系统还会有一个查询余额流程,我们先把这两个流程放到一起:

有没有发现,这个两者有一个相同的验证流程,我们先把它们圈起来再说下一步:

有没有想过可以把这个验证用户的代码是提取出来,不放到主流程里去呢,这就是AOP的作用了,有了AOP,你写代码时不要把这个验证用户步骤写进去,即完全不考虑验证用户,你写完之后,在另我一个地方,写好验证用户的代码,然后告诉Spring你要把这段代码加到哪几个地方,Spring就会帮你加过去,而不要你自己Copy过去,这里还是两个地方,如果你有多个控制流呢,这个写代码的方法可以大大减少你的时间,不过AOP的目的不是这样,这只是一个“副作用”,真正目的是,你写代码的时候,事先只需考虑主流程,而不用考虑那些不重要的流程,懂C的都知道,良好的风格要求在函数起始处验证参数,如果在C上可以用AOP,就可以先不管校验参数的问题,事后使用AOP就可以隔山打牛的给所有函数一次性加入校验代码,而你只需要写一次校验代码。不知道C的没关系,举一个通用的例子,经常在debug的时候要打log吧,你也可以写好主要代码之后,把打log的代码写到另一个单独的地方,然后命令AOP把你的代码加过去,注意AOP不会把代码加到源文件里,但是它会正确的影响最终的机器代码

图解

现在大概明白了AOP了吗,我们来理一下头绪,上面那个方框像不像个平面,你可以把它当块板子,这块板子插入一些控制流程,这块板子就可以当成是AOP中的一个切面。所以AOP的本质是在一系列纵向的控制流程中,把那些相同的子流程提取成一个横向的面,这句话应该好理解吧,我们把纵向流程画成一条直线,然把相同的部分以绿色突出,如下图左,而AOP相当于把相同的地方连一条横线,如下图右,这个图没画好,大家明白意思就行。

    

总结

这个验证用户这个子流程就成了一个条线,也可以理解成一个切面,aspect的意思我认为是方面,你用什么实物去类比,只要你能理解都可以。这里的切面只插了两三个流程,如果其它流程也需要这个子流程,也可以插到其它地方去。

最新文章

  1. CString std::string相互转换
  2. <fmt:formatDate>标签的输出格式:
  3. Html5离线缓存详细讲解
  4. 初识WCF
  5. ThinkPHP 3.2.3 多模块 和 多应用 的配置
  6. nginx相关配置说明
  7. JavaScript If...Else、Switch、For、While、Break、Continue语句
  8. Windows 2008修改密码策略方法
  9. SQL基础篇---函数及其函数配套使用的关键字
  10. SOA体系结构基础培训教程-规范标准篇
  11. Windows下Postgre SQL数据库通过Slony-I 实现数据库双机同步备份
  12. try...catch...finally中try块发生的事件顺序
  13. java进制转换(无视正负数的差别)
  14. node.js核心模块
  15. JQuery基础知识学习1
  16. 通过浏览器F12开发工具快速获取别的网站前端代码的方法
  17. 【此处有干货~】jmeter+ant+jenkins持续集成配置及过程中问题解决思路
  18. python--文件流读写
  19. Burpsuite之Burp Collaborator模块介绍
  20. Java抽象类和接口的比较

热门文章

  1. class实现React继承以及constructor的super的问题
  2. Python学习(七)——匿名函数、map函数、filter函数、reduce函数与其他内置函数
  3. 移动APP漏洞自动化检测平台建设
  4. hadoop学习笔记(五)hadoop伪分布式集群的搭建
  5. org.apache.catalina.connector.ClientAbortException: java.io.IOException: 你的主机中的软件中止了一个已建立的连接。
  6. Python整合pdf【新手必学】
  7. 201771010135 杨蓉庆AND张燕 《面对对象程序设计(java)》第十一周学习总结
  8. Ethereum Learning Materials
  9. Java 线程高级
  10. 【C语言】(数组方式)求n名同学的平均成绩