面向切面编程AOP的浅显理解(一)

最近在看《Spring源码深度解析》这本书,里面有一章专门来介绍AOP,鉴于以前也看过用过AOP的东西,但是这些东西都比较零碎,没有很深入很系统的去了解,在这里我简单总结一下。
    一般情况下,我们都对OOP比较熟悉,面向对象编程在我们日常生活中简单都能遇得到,更容易理解,但是AOP这个面向切面编程,咋一看是懵逼的。AOP是Aspect Oriented Programming的简称,从英文字面上可以看出来是Aspect,一般情况下我们翻译为方面,切面,所谓切面,方面字面理解就是不是一个整体,而是一个部分。好比一张纸,你可以把这张纸给剪开成好多小纸条。这些剪纸的地方就是切面。你也可以这样想,这张纸上写满了代码,当我把这张纸给按照如下所示行给剪掉的时候,那么就会分离出如下这种:(>>>>>>>>>>>>>>>>>>>>>>>:代表一种切口,切面)
public void main(String args[]){
new Object.A();
>>>>>>>>>>>>>>>>>>>>>>>>>
new Object.B();
>>>>>>>>>>>>>>>>>>>>>>>>>
new Object.C();
>>>>>>>>>>>>>>>>>>>>>>>>>
}
即使剪切了,但是我们可以清楚的看到,我们并没有改变了代码的业务逻辑,这样我们就可以在这些切口这里做文章了,当我们需要统计某段业务代码的网络日志,某段业务代码的耗时,增加安全或者异常的功能的时候,此时利用AOP来实现可以减少对业务逻辑代码的污染的同时也把功能给实现了。比如下面代码:
public interface TestAopIn{
public void doFunction();
}
public class TestAopImpl implements TestAopIn{
public void doFunction(){
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
System.out.println("TestAopImpl:Implement some functions");
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
}
}
当为了增加一些功能的时候,为了防止污染业务逻辑代码,那么我们可以在剪切口进行修改,诸如:
public class TestAopImpl implements TestAopIn{
public void doFunction(){
System.out.println("before call function");
System.out.println("TestAopImpl:Implement some functions");
System.out.println("after call function");
}
}
总结:OOP是一种纵向的编程逻辑,比如继承和实现,一种类似从上而下的纵向关系,而AOP面向切面编程是一种横向切面的编程逻辑。剪切掉,然后增加相关的增量功能服务代码,这样即不会影响存量代码,又实现了增量功能。







     

猜你喜欢

转载自blog.csdn.net/horero/article/details/76358767