AOP的功能:
AOP具有四大功能:
日志记录(方便查找和Debugger),性能统计(分析系统性能),安全控制,事务处理,异常处理。
AOP的作用:
通过前面提到的四大功能,aop可以将这些逻辑从代码中分离出来,独立到非指导业务逻辑的方法中,进而改变这些行为的时候不影响业务逻辑的代码。
也就是说,以往当我们只是单纯地采用oop时,由于是对象视角,当触及到以上几方面业务时,常常需要对对象进行大批量的改动。这样既增大了业务量,也给开发带来了难度。因此我们需要对业务进行分离。
AOP的术语:
Aspect(切面): Aspect 声明类似于 Java 中的类声明,在 Aspect 中会包含着一些 Pointcut 以及相应的Advice。 -
Joint point(连接点):表示在程序中明确定义的点,典型的包括方法调用,对类成员的访问以及异常处理程序块的执行等等,它自身还可以嵌套其它 joint point。
Pointcut(切入点):表示一组 joint point,这些 joint point
或是通过逻辑关系组合起来,或是通过通配、正则表达式等方式集中起来,它定义了相应的 Advice 将要发生的地方。
Advice(通知):Advice 定义了在 pointcut 里面定义的程序点具体要做的操作,它通过 before、after 和around 来区别是在每个 joint point 之前、之后还是代替执行的代码。
除此以外,还有引入、目标对象、代理等概念,后面会提及。
JDK动态代理
AOP的实现需要动态代理,因此先阐述这一概念。
代理模式
首先介绍一下何为代理模式:
代理模式是设计模式的一种,代理模式给某一个对象提供一个代理对象,并由代理对象控制对原对象的引用。
比如我们要买房,找房这一费劲的过程我们会交给房屋中介,客户只要在有合适房源后付钱即可,这就是一个简单的代理模式。
优点如下:
(1).职责清晰
真实的角色就是实现实际的业务逻辑,不用关心其他非本职责的事务,通过后期的代理完成一件完成事务,附带的结果就是编程简洁清晰。
(2).代理对象可以在客户端和目标对象之间起到中介的作用,这样起到了中介的作用和保护了目标对象的作用。
(3).高扩展性
动态代理
说起动态代理就不得不说下静态代理:静态代理虽然体现了代理模式的优点,但代理只能为一个类服务,因此如果有很多个类,就会很麻烦。
但是由于Java有反射机制,就可以实现动态代理。