什么是面向切面的编程,JAVA中Spring解释下面向方面与面向切面编程

1 , JAVA中Spring解释下面向方面与面向切面编程面向对象与面向方向第一个包含了切面的注解,就是用@的 第二个都是spring导入的本身的内部类是面向接口和面向切面面向接口是围绕着接口来写面向切面是围绕着好几个模块来可同时写这样节省时间和Money
2,什么是AOP面向切面编程面向切面编程,通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术 。AOP与OOP是面向不同领域的两种设计思想 。OOP(面向对象编程)针对业务处理过程的实体及其属性和行为进行抽象封装,以获得更加清晰高效的逻辑单元划分 。AOP则是针对业务处理过程中的切面进行提?。?它所面对的是处理过程中的某个步骤或阶段,以获得逻辑过程中各部分之间低耦合性的隔离效果 。aspect oriented programming(面向切面编程),可以 通过预编译方式和运行期动态代理实现在不修改源代码的情况下给程序动态统一 添加功能的一种技术 。
3,spring 框架的面向切面编程如何理解Spring提供了对AOP技术的良好封装,AOP称为面向切面编程,就是系统中有很多各不相干的类的方法,在这些众多的方法中要加入某种系统功能代码,例如:加入日志、权限判断、异常处理等,这种应用成为AOP 。实现AOP功能采用的是代理技术,客户端程序不再调用目标 , 而调用代理类 , 代理类与目标类对外具有相同的方法声明,有两种方式可以实现相同的方法声明,一是实现相同的接口,而是作为目标的子类在JDK中采用Proxy类产生动态代理的方式为某个接口生成实现类,如果要为某类个生成子类,则可以用CGLIB 。在生成的代理类的方法中加入系统功能和调用目标类的相应方法,系统功能的代理以Advice对象进行提供 , 显然要创建出代理对象,至少需要目标类和Advice类 。Sping提供了这种支持,只需要在Sping配置文件中配置这两个元素即可实现代理和Aop功能 , 例如:<bean id = "proxy" type = "org.spring.framework.aop.ProxyBeanFacory"><property name = "target" ref = ""></property><property name = "advisor" ref = ""></property></bean>spring主要内容是:IOC AOP 事务管理 远程调用 最主要的是前面三个 。你弄个小项目熟悉下就基本会用了 。spring设计的初衷就是为了方便开发设计,他得另一个有点就是对系统是非侵入式起作用 。spring上手是比较容易的,但要精通那就需要好好花点时间了 。建议看看spring in action这本书这么来说吧 , 在一个动作或者事件中,比如说,你现在想写字(action),那么你需要笔 , 于是乎,你new了一个笔来写字,这里,你用了new笔,你这个动作和笔有了关联,没了笔 , 你就写不了字,也就是说,你的这个行为依赖于笔了,他们就构成了依赖关系 。或者你现在想组装一台电脑(transaction),那么你就需要显示器、主板、键鼠光驱等对象,这些对象通常是new出来的,new出来的对象和当前(this)对象就有了依赖关系 。spring中对依赖的对象采用注入 , 这就是常说的依赖注入吧.再说aop,还是以上面的例子 。比如你想在每次写字之前都检查一下笔里有没有墨水了,通常的做法是:在写字这个action里调用判断是否有墨水的方法 。这样做的不好一个方面是,写字的action和是否有墨水的方法产生了依赖,如果你有十几支不同的笔写字,每一个笔的action里都要调用判断是否有墨水的方法;另一个方面是:就面向对象的程序设计来说,写字和判断是否有墨水的方法是同一等级的 , 如果你让写字这个动作来判断是否有墨水不够人性化,有违面向对象的程序设计的思想 。如果用spring的aop,是把写字的action作为一个切面,在每次调用不同的笔来写字的方法之前,调用判断是否有墨水的方法 。它是由标签在spring配置文件里定义的,形式如:这里 , 对com.baidu.dao下所有以write开头的方法做了一个切面,做要做的操作是以下面的pointcut-ref="allmanagermethod"来定义的 。具体到你这个配置文件,这里没有aop,只有ioc 。【什么是面向切面的编程,JAVA中Spring解释下面向方面与面向切面编程】
4,什么是面向切面编程AOP面向切面编程(AOP是Aspect Oriented Program的首字母缩写),我们知道 , 面向对象的特点是继承、多态和封装 。而封装就要求将功能分散到不同的对象中去,这在软件设计中往往称为职责分配 。实际上也就是说,让不同的类设计不同的方法 。这样代码就分散到一个个的类中去了 。这样做的好处是降低了代码的复杂程度,使类可重用 。但是人们也发现,在分散代码的同时,也增加了代码的重复性 。什么意思呢?比如说,我们在两个类中,可能都需要在每个方法中做日志 。按面向对象的设计方法,我们就必须在两个类的方法中都加入日志的内容 。也许他们是完全相同的,但就是因为面向对象的设计让类与类之间无法联系,而不能将这些重复的代码统一起来 。也许有人会说,那好办?。颐强梢越舛未胄丛谝桓龆懒⒌睦喽懒⒌姆椒ɡ铮?然后再在这两个类中调用 。但是 , 这样一来,这两个类跟我们上面提到的独立的类就有耦合了,它的改变会影响这两个类 。那么,有没有什么办法,能让我们在需要的时候,随意地加入代码呢?这种在运行时,动态地将代码切入到类的指定方法、指定位置上的编程思想就是面向切面的编程 。一般而言 , 我们管切入到指定类指定方法的代码片段称为切面 , 而切入到哪些类、哪些方法则叫切入点 。有了AOP , 我们就可以把几个类共有的代码,抽取到一个切片中,等到需要时再切入对象中去,从而改变其原有的行为 。这样看来,AOP其实只是OOP的补充而已 。OOP从横向上区分出一个个的类来,而AOP则从纵向上向对象中加入特定的代码 。有了AOP,OOP变得立体了 。如果加上时间维度,AOP使OOP由原来的二维变为三维了,由平面变成立体了 。从技术上来说,AOP基本上是通过代理机制实现的 。AOP在编程历史上可以说是里程碑式的,对OOP编程是一种十分有益的补充 。面向对象的编程主要注重核心业务 , 而面向切面编程主要关注一些不是核心的业务,但又是必须的辅助功能,比如一个完整的系统中,记录平时系统运行时抛出的异常,需要我们去记录 , 以便我们对系统尽快的修复 。这就是我们常用的日志 。如果对一些要求比较重要的数据操作,事务是不可少的,如金融系统,这样的数据很重要,每步操作都很重要,我们就应该用到事务处理 。这就是我们常用的事务处理 。可根据你的系统数据的重要性,有选择的应用 。还用一个常用的就是安全验证了,它也是常用的,对于不同的页面,访问的身份也不一样 。这就是我们常用的身份验证 。以上这些不是针对特定那个业务模块的 , 可能针对所有的模块 。它们只是一些附加的功能,相对模块的主功能而言 。如果在每个模块中都夹杂着这些不是核心业务的代码 , 看起来与核心业务有点关系,但这样处理,会对以后的维护比较头疼 。同时也违背了面向对象的一条原则 , 自己对自己负责面向方面的编程主要是辅助核心业务的,它并不是核心业务,但它又是不可缺少的 。我们可以这样理解它与面向对象思想的联合使用 。其实面向方面编程就是把那些夹杂在核心业务方法里面的代码抽取出来并模块化,把它们单独看成一个模块功能.来与核心业务共同完成比较完善的功能.面向方面编程(aspect-oriented就是把那些不是核心业务应该处理的代码提取出来,进行封装成模块化.来处理那些附加的功能代码.(如日志,事务 , 安全验证)我们把这个模块的作用理解为一个切面,告诉我们它是一个功能模块.我们可以把它看成一个切面.说白了就是我们写一个类,在这个类中写一些处理在核心业务中起到同样效果的方法.这样大家应该明白了吧.专业的概念就是那么难理解. 第二个:连接点(joinpoint),简单的理解就是在切面模块中定义的方法.就是上面定义类中的方法. 第三个:切入点(pointcut).就是连接点的集合,就是一组方法的集合了. 以下几个就比较理解了,目标对象就是要处理的核心业务了.代理就更容易理解了,让一个代理去完成这个任务.

    推荐阅读