spring中的面向切面编程与面向对象编程方式冲突吗
发布网友
发布时间:2022-04-26 04:56
我来回答
共2个回答
热心网友
时间:2022-04-26 06:26
这么来说吧,在一个动作或者事件中,比如说,你现在想写字(Action),那么你需要笔,于是乎,你new了一个笔来写字,这里,你用了new笔,你这个动作和笔有了关联,没了笔,你就写不了字,也就是说,你的这个行为依赖于笔了,他们就构成了依赖关系。或者你现在想组装一台电脑(Transaction),那么你就需要显示器、主板、键鼠光驱等对象,这些对象通常是new出来的,new出来的对象和当前(this)对象就有了依赖关系。
spring中对依赖的对象采用注入,这就是常说的依赖注入吧.
再说AOP,还是以上面的例子。
比如你想在每次写字之前都检查一下笔里有没有墨水了,通常的做法是:在写字这个Action里调用判断是否有墨水的方法。这样做的不好一个方面是,写字的action和是否有墨水的方法产生了依赖,如果你有十几支不同的笔写字,每一个笔的Action里都要调用判断是否有墨水的方法;另一个方面是:就面向对象的程序设计来说,写字和判断是否有墨水的方法是同一等级的,如果你让写字这个动作来判断是否有墨水不够人性化,有违面向对象的程序设计的思想。
如果用Spring的AOP,是把写字的Action作为一个切面,在每次调用不同的笔来写字的方法之前,调用判断是否有墨水的方法。它是由<aop:config/>标签在Spring配置文件里定义的,形式如:
<aop:config>
<aop:pointcut id="allManagerMethod" expression="execution(* com...write*(..))"/>
<aop:advisor pointcut-ref="allManagerMethod" advice-ref="txAdvice"/>
</aop:config>
这里,对com..下所有以write开头的方法做了一个切面,做要做的操作是以下面的pointcut-ref="allManagerMethod"来定义的。
具体到你这个配置文件,这里没有AOP,只有IOC。