Spring(一)——闲扯AOP与OOP

学Java也有一段时间了,其实一直心存疑虑。人家donet程序部署在服务器就能运行,而你Java程序凭什么就得多一道工序,非得部署在容器里面才能运行呢?J2EE为什么要区分J2EE容器和J2EE应用系统呢?


通过这两天接触Java的开源框架,自己有了一点想法。然后又在在网上查了一些资料之后,得出结论:J2EE容器实际上是分离一般应用系统中通用的部分。像事务、安全、数据库连接池等等这些功能,将这些分离出来做成一个通用的框架。这些功能机制的设计开发有一定难度,同时运行的稳定性和快速性都非常重要,必须经过长时间调试和运行经验积累而成,慢慢才形成了像Tomcat 、JBoss、WebLogic等J2EE容器服务产品。

简单来说,J2EE中分出的容器,就是将大多数软件中都会用到的东西拿了出来,时间长了慢慢的就成了产品。

开篇讲了这么多,估计有人都要拍砖了,还请您按捺住性子,看我慢慢道来。


从J2EE系统划分为容器和应用系统两个方面,我们已经看到一种分散关注的思路

(分散关注:将通用需求功能从不相关类之中分离出来;同时,能够使得很多类共享一个行为,一旦行为发生变化,不必修改很多类,只要修改这个行为就可以


1、什么是AOP?

AOP就是这种实现分散关注的编程方法,它就是将“关注”封装在切面中。那AOP又是什么呢?AOP是OOP的延续,是Aspect  Oriented  Programming的缩写,意思是面向切面编程(有人将其翻译成面向方面编程,个人认为是没有联系实际,单纯的字面翻译,扯的有点不着边往细粒度里面说,AOP就是“高内聚,低耦合”的一种实现。它实现了调用者与被调用者之间的解耦合。


    AOP的思想具体看下图:

             Spring(一)——闲扯AOP与OOP_第1张图片

advice:正真执行的代码,或者说关注实现。类似Struts中的action。

joinpoint:代码中激活advice被执行的激活点。

pointcut:一系列的joinpoint成为pointcut。pointcut有时候指的是joinpoint。 (大家在这里联想点和线的关系进行理解,joinpoint是点,pointcut是线。)


2、什么是OOP?

OOP面向对象设计在IT界更是无人不知无人不晓。在一开始学习VB的时候,老师就跟我们说:VB一共分两大部分:面向过程和面向对象。当初还对面向对象一知半解,而现如今早已天天跟面向对象打交道,对面向对象可谓是相当熟悉了。

那什么是面向对象呢?封装、继承、多态。这个大家都知道。那它到底是怎么“封装、继承、多态”的呢?

面向对象的主要思想是:将一个系统抽象成一个一个的对象,每个对象都是由属性和方法组成,当你完成这些属性和方法的编写时,系统也差不多完成了。每个对象都只干自己能干的事情,所有对象加起来就是整个系统。


                       Spring(一)——闲扯AOP与OOP_第2张图片


3、AOP和OOP的关系

AOP是在OOP之后出现的,我认为,AOP的出现是对OOP的一个很好的补充。面向对象编程中主要支持的思想就是面向接口编程,层与层之间不依赖具体,只依赖抽象。

使用OO编程,我们编写的很多类都不够“纯粹”,类中总会有一些不属于其应该完成的成分(或者说功能)存在,比如说错误处理、BLL中的New出的工厂等等。而AOP却恰好解决OOP中的这些问题,所以说,AOP是OOP的一个补充。


面向对象是纵向结构的,它能够使系统的逻辑单元更加清晰。

而面向切面是横切结构的,它针对业务逻辑层的切面进行提取。比如面向切面完成一个功能,这一功能却在每个模块中都有涉及,他就像刀切豆腐一样切进系统一样,能够完成对系统完成同一控制。

你可能感兴趣的:(Spring(一)——闲扯AOP与OOP)