首先各位小猿,想要了解面向切面编程,首先我们需要引入一个概念——横切关注点。
横切关注点即是影响各处的功能,即安全、事务、其他。
下面我们分析一下这个图。
第一步,此图展现了什么?
一个被划分为模块的典型应用。
第二步,需要了解每个模块的功能
为特定业务领域提供服务。
第三步,提供服务需要什么?
需要类似的辅助功能,例如安全和事务管理。
第四步,我们如何在不同的服务重用功能?
通过继承和委托,但是继承和委托可能有如下缺点:
继承:如果整个应用使用基类,可能导致脆弱的对象关系。
委托:需要对委托对象进行复杂的调用。
第五步,引进切面功能
切面
1.什么是切面?
在一个地方定义功能,但是可以声明功能以何种方式在何种地方使用,无需影响修改的类。
2.横切关注点?
横切关注点可以被模块化为特殊的类, 这些类被称为切面 (aspect) 。
3.横切关注点的好处
首先,现在每个关注点都集中于一个地方,而不是分散到多处代码中;
其次,服务模块更简洁,因为它们只包含主要关注点 (或核心功能) 的代码,而次要关注点的代码被转移到切面中了。