我一直在阅读面向方面的编程。我找不到任何可以用外行人的术语解释AOP概念的资源。特别是,我很难理解“建议”是什么以及织布者究竟做了什么。如果有人能在AOP上解释或拥有良好的资源,那就太棒了。
答案 0 :(得分:2)
任何入门教程都应该没问题;您对这些条款的具体了解是什么?
如果原始代码包含方面,“weaver”会处理修改。例如,在Java中,在编译或加载时操作字节代码以注入修改原始流的代码。 “建议”是注入的代码。
(粗略地)
答案 1 :(得分:1)
面向方面编程在您遇到“横切关注”时使用,这会影响整个程序,并且不能整齐地装入普通类。
AOP的典型示例是日志记录。您的整个应用程序都需要记录,但是每次要在类中记录某些内容时,您都不希望新建记录器对象,因为这会将您的类紧密地绑定到记录器对象,并在整个应用程序中分散日志记录代码。
相反,你想要做的是拥有一个logger类(可能是一个静态类,所以你不必实例化它),然后有一些方法从任何地方调用该类。您希望保持松散耦合,以便您可以根据需要将记录器类替换为另一个。
通过AOP调用课程有很多种方法。在C#中,一种方法是使用Attributes:
[MyLogger()]
CallingThisMethodCallsTheLogger(int someParameter)
{
// Do something with someParameter that has nothing to do with the logger
}
通过AOP调用类方法的另一种方法是检测它们。这可以通过执行类方法的二进制重写来完成,这样它们首先调用AOP方法,然后以通常的方式调用常用方法。例如,可以完成仪表类测量它们的性能。
面向方面编程中使用的标准术语可能包括:
横切关注点:尽管OO模型中的大多数类都是如此 将执行单一,特定的功能,他们经常共享, 其他课程的二级要求。
建议:这是您要应用的附加代码 你现有的模特。在我们的示例中,这是日志代码 我们想在线程进入或退出方法时应用。
切入点:这是给定执行点的术语 需要应用跨领域关注的申请。 在我们的示例中,当线程进入时,到达切入点 方法,并在线程退出时达到另一个切入点 方法
看点:切入点和建议的组合是 称为方面。在上面的示例中,我们添加了一个日志记录方面 我们的应用程序通过定义切入点并给出正确的 建议。