
The disadvantage I found out:
我使用Spring AOP的方面编写了一个示例应用程序.我配置了带注释的Aspect(@Pointcut,@ Before,@ Aspect等).触发方面的方法(当然是Pointcut的一部分)当然是不同类的一部分,没有任何注释.
=>我真的认为一个很大的缺点是,当观察其他类的那些方法时,不清楚它们是否触发了一个方面.他们不需要注释或其他任何东西,只是在方面的切入点中提到它们. (我真的希望你明白我的意思).所以这就是为什么我认为AOP使代码也不那么容易理解!
a)这个问题有解决方案吗? (当我将整个配置放在XML文件中时,这可能会解决吗?我不这么认为.)
b)当我使用AspectJ而不是Spring AOP时,这个问题是否仍然存在?
Springs Features using Spring AOP: they dont have this disadvantage?
由于Spring AOP是许多Spring功能的一部分(就像声明式事务管理或(可能)Spring Security(?)),我仔细研究了这些功能.我根本找不到任何劣势.
c)让我们以声明式事务管理为例:使用这些注释(@transactional)管理事务非常容易,我真的找不到上面提到的缺点.我可以看到触发特定行为的方法. (所有@transactional方法触发事务行为)也许我误解了一些东西,这不是使用AOP的地方?但是,如果我没有误解这一点,为什么在这里可以看到哪些方法触发方面,为什么不能在上面的例子中看到它?我真的很想知道这个!
谢谢你的回答! 🙂
编辑:a)和b)被回答(使用标记这些方法的IDE),c)仍然缺失:-)
如果您将 Eclipse与Spring IDE和AspectJ插件或STS一起使用,IDE将向您显示Aspects编织的位置.
对于点b)
如果您使用AspectJ和支持AspectJ的IDE(带有AspectJ插件的Eclipse或STS),那么您将在编码Aspect的源代码中看到标记.
编译时间AspectJ的不利之处在于,您无法在库中编辑方面. (没有先进的技术).
对于点c)
像@Transactional这样的声明性方面只有一个缺点. – 您可以忘记将注释放在方法上.
但是,如果您有一个规则,例如:由@Service保护的类中的每个公共方法(或者如果您希望构建自己的@TransactionalService),都是事务性的,那么您不需要在每个方法上指定@Transactional注释. – 所以在摘要中:声明性方面非常适合阅读(你不会忽略它们),如果你的代码非常(简单地说)是“个人”(而不是“不一致”这个词),它们就很好.但是如果您在具有强大的Architecural规则的环境中工作(就像@Service类中的每个公共方法一样……),那么您可以在Point Cut Definition中编写此规则,而不是使用声明性Aspects.
转载注明原文:Spring AOP:使用它时的缺点 – 使用Spring AOP的Spring功能没有这个缺点吗? - 乐贴网