AOP

AOP面向方面编程,打破对象层次的界限,将共通关切点集中到一起,剥离单一职责代码,让程序结构更清晰。AOP可以看作对一些设计模式的修正,如Observer模式、Decorator模式、职责链模式,在达到相同目的同时,去除了使用设计模式而引入的复杂性。AOP有效减少重复代码、降低测试负担,适用于重构和改造遗留系统。

 

例如传统的日志功能,非常“侵入式”,核心业务逻辑和日志逻辑混合,难以更新,也容易遗留需要修改的地方,导致使用日志分析调试时可能被误导。而使用AOP的方式将日志功能调用集中于一点,剥离日志代码,倒转业务逻辑对日志逻辑的依赖,现有业务代码可以完全不理会甚至不知道日志如何实现,这就是“单一职责”的设计原则。

 

通过拦截器实现:拦截字段访问、方法调用、构造器调用、域访问

 

AOP框架:

1、AspectJ

静态AOP,是最为成熟、语意最完整的AOP方案,是对java的扩展,依靠编译器实现编译时织入或加载时织入,构建时麻烦,但执行效率高(直接操作字节码),不受应用类型限制,可选择代码和注解两种方式,代码方式更为强大和灵活(注解方式仅为代码方式功能的子集)

 

2、SpringAOP

动态AOP,通过拦截器拦截目标代码,使用自动代理改变目标代码行为,构建简单,运行时需做更多工作,在切入点定义的灵活性和粒度不如AspectJ,但使用极为简化,可与AspectJ紧密集成取长补短,对于不能很好实现的操作可无缝回退到AspectJ实现,属于Spring框架部分,为Spring实现事务管理。

 

 

 

 

 

【】

你可能感兴趣的:(AOP)