use*_*220 4 aop aspectj cross-cutting-concerns spring-aop
我试图理解AOP中使用的关注点的分离.因此,如果有人能够使用一些基本的HelloWorld示例解释我在AOP中的代码散射和代码纠缠是什么,我将不胜感激.如果一个特定的问题不是系统核心问题而是一个方面,我怎么知道呢?非常感谢.
小智 10
我担心我会使用日志记录作为一个例子,这是我们经常使用的例子,但我希望它能让它易于理解.考虑这个带有日志记录的helloworld程序:
public class HelloWorld {
private static Logger logger = Logger.getLogger(HelloWorld.class);
public static void main(String []argv) {
logger.entering("HelloWorld","main");
System.out.println("Hello World");
logger.exiting("HelloWorld","main");
}
}
Run Code Online (Sandbox Code Playgroud)
我的班级只有8行(忽略空格) - 其中3行记录,差不多一半!日志记录与此类打印的主要目标无关Hello World.记录与此类的主要目标纠缠在一起.如果我们可以删除它并以另一种方式表达它,那么我们将拥有一半的代码,并且该类主要尝试实现的内容将更加清晰.另外,纠缠不清可能会损害重用等功能 - 如果没有执行某些日志记录并需要某种日志记录基础结构,则此代码不能用于打印helloworld.
现在考虑一个真正的系统,其中有多个类,并且它们都在进行日志记录.现在假设我决定要更改我正在使用的一种日志记录方法 - 我希望所有的调用都entering更改为info并包含一些额外的信息.恶梦!我的日志记录分散在我的代码库中.没有一个地方可以做出这种改变,可能有数千个.
如果我在一个方面捕获了分散的横切关注点,那么只有一个地方可以进行更改.
确定可能是一个方面:
散射可能是一个小规模的问题.也许你的一个类中的每个方法都在重复一些模式,但没有其他类正在使用它.在为这些方法中的散射解决问题的类中创建一个小方面没有坏处.
| 归档时间: |
|
| 查看次数: |
1900 次 |
| 最近记录: |