AOP(Aspect Oriented Programming)是面向切面的编程,是OOP的重要扩展。
AOP可以通过静态编译或者动态代理机制实现,基本原理是静态或动态的生成需要做增强处理的方法/属性/构造的代理对象,当需要调用这些方法/属性/构造时,会调用增强了的方法/属性/构造。
如果把已有业务逻辑称为纵向,AOP主要应用场景是在某些业务逻辑点做横切(cross cutting),为这些业务逻辑点实现更为丰富的功能,例如验证,日志,事务处理,异常处理等,AOP称之为横切关注点(cross-cutting concerns)。Advice是增强功能的实现,切点(pointcut)是增强代码开始的位置,建议和切点和在一起称为切面(Aspect)。
连接点模式(join point models/JPM),一个JPM定义了三个事情:
- 什么时候Adivce可以运行。这些被称为连接点(join points),例如方法执行,属性引用或构造。
- 指定连接点的方式,称为切点(piontcuts),可以是方法签名。
- 连接点运行的代码,称为Advice。
Weave(织入)
将切面应用到目标对象并导致代理对象创建的过程
这些增强功能特点是和业务逻辑不直接相关,分布广,位置散,且重复,AOP可以有效的实现这些需求。
静态代理是在运行前创建代理对象;动态代理是在运行时创建代理对象。
AspectJ,Spring AOP,JBoss是主流的AOP实现,主要是帮助完成织入代理的功能,易用性和性能上各有千秋。
Spring AOP
建立代理的顺序:
1。默认使用java动态代理实现,可以为有接口的实例实现代理
2。当需要代理类,而不是代理接口时,用CGLib实现
定义了切入点和增强类后,Spring AOP有两种方式织入代理:配置文件aop.xml和注解@Aspect。
《选择正确的时机进行编织》
https://www.ibm.com/developerworks/cn/java/j-aop-weave/index.html