龙空技术网

面试官经常问AOP,那到底啥是AOP?

Java编程世界 480

前言:

当前姐妹们对“aop和代理的区别”大致比较重视,兄弟们都想要学习一些“aop和代理的区别”的相关知识。那么小编也在网上汇集了一些对于“aop和代理的区别””的相关知识,希望小伙伴们能喜欢,各位老铁们一起来学习一下吧!

1. 定义

AOP意为:面向切面编程,通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术。AOP可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间的耦合度降低,提高程序的可重用性,同时提高了开发的效率。

我的理解是纵向关系是OOP,横向角度是 AOP。

2.OOP 与 AOP 的区别面向目标不同:简单来说 OOP 是面向名词领域,AOP 面向动词领域。思想结构不同:OOP 是纵向结构,AOP 是横向结构。注重方面不同:OOP 注重业务逻辑单元的划分,AOP 偏重业务处理过程中的某个步骤或阶段。3.OOP 与 AOP 的联系

两者之间是一个相互补充和完善的关系。

4. 关于AOP的几个术语

1)aspect(切面):实现了cross-cutting功能,是针对切面的模块。最常见的是logging模块,这样,程序按功能被分为好几层,如果按传统的继承的话,商业模型继承日志模块的话根本没有什么意义,而通过创建一个logging切面就可以使用AOP来实现相同的功能了。

2)jointpoint(连接点):连接点是切面插入应用程序的地方,该点能被方法调用,而且也会被抛出意外。连接点是应用程序提供给切面插入的地方,可以添加新的方法。比如以上我们的切点可以认为是findInfo(String)方法。

3)advice(处理逻辑):advice是我们切面功能的实现,它通知程序新的行为。如在logging里,logging advice包括logging的实现代码,比如像写日志到一个文件中。advice在jointpoint处插入到应用程序中。以上我们在MyHandler.java中实现了advice的功能

4)pointcut(切点):pointcut可以控制你把哪些advice应用于jointpoint上去。决定了那个jointpoint会获得通知。

5)introduction:允许添加新的方法和属性到类中。

6)target(目标类):是指那些将使用advice的类,一般是指独立的那些商务模型。比如以上的StudentInfoServiceImpl.

7) proxy(代理类):使用了proxy的模式。是指应用了advice的对象,看起来和target对象很相似。

8)weaving(插入):是指应用aspects到一个target对象创建proxy对象的过程:complie time,classload time,runtime

5. 实现

AOP的实现主要是依赖代理模式,可以使用aspectj静态代理,cglib动态代理,jdk动态代理等实现。具体可参照

6. 主要功能

日志记录,性能统计,安全控制,事务处理,异常处理等等。

标签: #aop和代理的区别