AOP旨在涵盖它所指的横切关注点,即系统内许多对象所需的功能,但不是这些对象关注的核心.如果通过将交叉问题编码到整个系统的对象中来满足这些要求,我们最终会在许多对象之间分离出一个混乱,难以维护的实现.
记录横切关注的典型例子是:日志记录对于真实的实时系统至关重要,需要在整个系统中实施,但实际上并不是该系统中对象的关注:系统可能需要销售 -用于实施日志记录的税收计算对象,但日志记录并不是销售税计算对象本身的关注点.AOP允许我们将这些系统范围(交叉)要求分别指定给我们的主要业务逻辑,然后在运行时或编译时将两者组织在一起.
AOP通过拦截对象上方法的调用来工作.截取点称为切入点,截取的方法是建议的方法,在截获的方法上建议的代码被称为通知.我只是通过Spring.Net的AOP框架熟悉AOP,它允许您通过配置文件和编程方式指定和应用切入点和建议.Spring.Net AOP有四种类型的建议:before,after,around和throws,它们在调用建议方法之前调用建议方法,调用之后调用,调用之前和之后以及抛出异常时调用分别.无论是通过配置还是以编程方式应用,建议的方法都不了解Spring.Net AOP,甚至不知道它已被建议.
AOP有用的另一个例子是交易.如果我们尝试在对象内的代码中实现它,我们最终会得到一些对象,这些对象必须知道它们在一个事务中行动,在我看来,这不是一个理想的设计特性.AOP允许我们在参与交易的对象外部创建和协调交易,这可以提供更稳定,维护友好的设计.
Spring.Net文档非常擅长解释AOP,特别是Spring.Net的AOP实现,并包含许多示例.即使您不考虑使用Spring.Net AOP框架,也值得一看.