Java: Spring AOP amp;amp; Refactoring(Java:Spring AOPand;重构)
问题描述
所以我开始使用Spring AOP,我突然想到了一些事情。配置方面时,所有批注都使用字符串作为参数,而不是使用类对象。
我之所以提出这个问题,是因为这意味着IDE(我使用的是Eclipse,所以我在这里只引用它)将不能正确地重构方面。因此,如果我有一个MyClass类,它的方法是公共的void Foo(),则Spring AOP批注的示例如下:
@Before ("execution(public void package.MyClass.foo())")
因为批注中的参数是一个字符串,所以如果我将方法名重构为公共void foo2(),它将破坏此方面的绑定。
我一直在搜索各种论坛和教程,但无论在哪里我都只能看到字符串参数,这表明这是唯一的选择。我想您可以通过在声明绑定的方式上更通用一点来解决这个问题:
@Before ("exeuction(public void package.MyClass.set*(..))")
这个新方法适用于MyClass中的任何setter方法,具有任意数量的参数(或没有参数)。当然,像这样含糊其辞可能并不总是奏效。
无论如何,我在这里有点咆哮,很晚了,我有点累了,我的大脑因为寻找答案而筋疲力尽。但我的最后一个问题是:有没有办法设置Spring AOP注释,以便重构可以影响它们?谢谢。
AOP
推荐答案的全部要点是以模块化的方式实现横切行为,并将其应用于理想情况下不知道任何方面的应用程序代码。因此,您在两者之间没有固定的连接。重要的是要记住,在维护和重构应用程序代码的同时,您还应该用它重构方面,以确保切入点不会中断。
话虽如此,如果您安装AJDT(AspectJ开发工具),Eclipse和其他IDE仍然会提示您应用哪些方面。我主要使用完整的AspectJ,而不是称为Spring AOP的基于代理的"AOP lite"变体,所以我不知道AJDT对Spring AOP是否有用。不过,它将通过LTW(加载时编织)将AspectJ应用于Spring。
这里是"方面可视化"视角的屏幕截图:
它以图形方式显示哪些方面适用于代码的哪些部分。如果您双击任何虚线,代码编辑器将引导您到应用方面的确切位置。
还有交叉引用视图,在方面代码和纯Java代码中有很少的指示符:
右侧是交叉引用视图,列出了应用于当前所选方法的所有方面。在左侧有一些小图标,指示适用于每种方法的建议类型。
顺便说一句,交叉引用视图也是从方面工作的。将光标放在建议内时,外部参照视图将列出代码中应用该建议的所有位置:
还有更多:AspectJ编译器可以这样配置,以列出方面代码建议的所有连接点。您可以手动检查输出更改,甚至可以在自动烟雾测试中检查更改。例如,如果因为您更改了一些包、类或方法名称而导致建议不再适用,则会出现Xlint警告"AdviceDidNotMatch"和/或有时还会出现"validAboluteTypeName"。此外,有问题的建议的交叉引用视图将为空:
正如您刚才看到的,在重构应用程序或方面代码时,AJDT中有很多指示器和帮助器。
还有一件事:如果您使用AspectJ而不是Spring AOP,您可以选择使用更简洁、更具表现力的原生AspectJ语法,而不是注释样式的语法。我肯定更喜欢前者而不是后者。然后,您的代码编辑器中不仅有字符串,还有更好的语法突出显示、代码完成和重构。
最后,但并非最不重要的一点:您还应该为方面代码编写单元测试,也许还有集成测试,以便注意方面是否中断。手动检查很好,但自动回归测试在即时反馈方面是无与伦比的。;-)
这篇关于Java:Spring AOP&∧重构的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:Java:Spring AOP&∧重构
基础教程推荐
- 如何使用 Stream 在集合中拆分奇数和偶数以及两者的总和 2022-01-01
- 在螺旋中写一个字符串 2022-01-01
- 如何强制对超级方法进行多态调用? 2022-01-01
- 如何对 HashSet 进行排序? 2022-01-01
- 如何使用 Eclipse 检查调试符号状态? 2022-01-01
- Java 中保存最后 N 个元素的大小受限队列 2022-01-01
- Spring Boot Freemarker从2.2.0升级失败 2022-01-01
- 如何在不安装整个 WTP 包的情况下将 Tomcat 8 添加到 Eclipse Kepler 2022-01-01
- 首次使用 Hadoop,MapReduce Job 不运行 Reduce Phase 2022-01-01
- 由于对所需库 rt.jar 的限制,对类的访问限制? 2022-01-01