【发布时间】:2011-08-23 04:52:32
【问题描述】:
我正在使用 Spring Framework 3.0.5 和 Spring Security 3.0.5,我对面向方面的编程有疑问。目前我试图找出面向方面编程的缺点和优点。当然,理论上我知道:我可以避免冗余代码,我只需要在方面进行更改,而不是在代码中的任何地方等等。但我仍然有一些问题:
我发现的缺点:
我使用 Spring AOP 编写了一个示例应用程序。我用注释(@Pointcut、@Before、@Aspect 等等)配置了一个方面。触发切面的方法(当然是切入点的一部分)当然是不同类的一部分,并且没有任何注释。
=> 我真的认为一个很大的缺点是,当观察其他类的那些方法时,并不清楚它们是否触发了一个方面。它们不需要注释或其他任何东西,它们只是在切面的切入点中被提及。 (我真的希望你明白我的意思)。所以这就是为什么我认为 AOP 使代码也更难理解!
a) 这个问题有解决办法吗? (当我将整个配置放在一个 XML 文件中时,这可能会解决吗?我不这么认为。)
b)如果我使用 AspectJ 代替 Spring AOP,这个问题还会存在吗?
使用 Spring AOP 的 Springs Features:他们没有这个缺点?
由于 Spring AOP 是许多 Spring 特性的一部分(就像声明式事务管理或(也许)Spring Security(?)),我仔细研究了这些特性。我根本找不到任何缺点。
c) 让我们以声明式事务管理为例:使用这些注解 (@transactional) 管理事务非常容易,我并没有发现我上面提到的缺点。我可以看到触发特定行为的方法。 (所有@transactional 方法都会触发事务行为)也许我误解了一些东西,这不是使用AOP 的地方吗?但是如果我没有误解这一点,为什么在这里可以看到哪些方法触发了方面,为什么在我上面的示例中看不到?我真的很想知道这个!
感谢您的回答! :-)
编辑:a) 和 b) 已回答(使用标记这些方法的 IDE),c) 仍然丢失:-)
【问题讨论】:
标签: spring aop aspectj spring-aop