每个模块的核心功能都是为特定业务领域提供服务, 但是这些模块都需要类似的辅助功能, 例如安全和事务管理。如果要重用通用功能的话, 最常见的面向对象技术是继承(inheritance) 或委托(delegation) 。 但是, 如果在整个应用中都使用相同的基类,继承往往会导致一个脆弱的对象体系; 而使用委托可能需要对委托对象进行复杂的调用。
切面提供了取代继承和委托的另一种可选方案, 而且在很多场景下更清晰简洁。 在使用面向切面编程时, 我们仍然在一个地方定义通用功能,但是可以通过声明的方式定义这个功能要以何种方式在何处应用, 而无需修改受影响的类。 横切关注点可以被模块化为特殊的类, 这些类被称为切面(aspect) 。 这样做有两个好处: 首先, 现在每个关注点都集中于一个地方, 而不是分散到多处代码中; 其次, 服务模块更简洁, 因为它们只包含主要关注点(或核心功能) 的代码, 而次要关注点的代码被转移到切面中了。
AOP术语
与大多数技术一样, AOP已经形成了自己的术语。 描述切面的常用术语有通知(advice) 、 切点(pointcut) 和连接点(join point)
通知( Advice) ,在AOP术语中, 切面的工作被称为通知。
Spring切面可以应用5种类型的通知:
前置通知(Before) : 在目标方法被调用之前调用通知功能;
后置通知(After) : 在目标方法完成之后调用通知, 此时不会关心方法的输出是什么;
返回通知(After-returning) :
切面编程
最新推荐文章于 2024-08-10 08:15:00 发布
切面编程提供了一种替代继承和委托的解决方案,用于模块化横切关注点,如安全和事务管理。通过定义通知(Advice)、切点(Pointcut)和连接点(Join point),可以在不修改受影响类的情况下,声明性地应用通用功能。Spring支持5种类型的通知,并允许通过切点表达式精确匹配应用切面的位置。织入(Weaving)是将切面应用到目标对象的过程,Spring支持编译期、类加载期和运行期的织入。
摘要由CSDN通过智能技术生成