如下引用连接中的一段话,写的很精辟:java
咱们在写一个功能函数时,常常须要在其中写入与功能不是直接相关但颇有必要的代 码,如日志记录,信息发送,安全和事务支持等,这些枝节性代码虽然是必要的,但它会带来如下麻烦:编程
枝节性代码游离在功能性代码以外,它不是函数的目的,这是对OO是一种破坏segmentfault
枝节性代码会形成功能性代码对其它类的依赖,加深类之间的耦合,可重用性下降安全
从法理上说,枝节性代码应该监视'着功能性代码,而后采起行动,而不是功能性代码 通知'枝节性代码采起行动,这比如吟游诗人应该是主动记录骑士的功绩而不是骑士主动要求诗人记录本身的功绩函数
在Spring的AOP编程中: 若是加入容器的目标对象有实现接口,用JDK代理 若是目标对象没有实现接口,用Cglib代理
详情请参见参考连接。代理