aop是aspect-oriented-programming的缩写,它是一种思想,可在不改变程序源码的情况下为程序添加额外的功能
主要作用:降低业务逻辑之前的耦合度
应用场景:日志记录、跟踪、监控和优化,性能统计,应用程序异常处理,事物处理等
术语:
连接点、切点、切面、增强、目标对象、引介、织入、代理
使用aop的技术有几百种,java相关的aop项目有20多种,其中比较出名的有AspectJ(最完善)、AspectWerkz、JBoss Aop、spring aop(常用)
主要的实现方式:jdk自带的proxy,cglib的proxy
补充,aop主要是动态代理来做,动态代理和静态代理的区别是动态代理的代理类是动态产生的,静态代理类是针对每个代理业务逻辑需要有一个代理类。
相应的测试代码见:https://github.com/eric-hsu/ModelTest/tree/master/src/com/husq/test/model/proxy