我愿意在Spring应用程序上进行测试,其中上下文启动时间变得太慢。一种方法是使包扫描更严格,但是我将不得不在所有更严格的包结构中移动所有bean实现(例如,从com.foo。*到com.foo.beans。*)。
当我启动容器时,Spring扫描了超过2500个bean(实现+接口),因此我假设我必须移动大约1000-1300个类。好消息是:我可以轻松地在上下文启动期间生成它们的列表...
但是,我还希望使用列表文件作为输入进行自动重构。在我开始编写一些涵盖此任务的脚本之前,市场上有什么东西可以完成这项任务吗?我不是很害怕来自外部的类调用,因为基本上所有bean都是注入bean,并且只应该使用接口来调用它们(如果dip原则在所有地方都正确应用,但我将能够手动处理异常!)。
顺便说一句,因为第一个答案似乎表明我没有足够解释这个问题:列表中的文件位于不同的包中,而包可能还有其他类,我不想移动。我最好的方法是找到一种方法来调用eclipse重构,将单个文件从a位置移动到b,但是我知道的文件连续1200次。我不会这样做,我没有找到任何工具可以为我做这个批量任务,虽然它是一个完全自动化的任务,不应该花费超过一分钟,但需要一整天的点击..
答案 0 :(得分:1)
如果您使用的是eclipse IDE
1.右键单击项目 - >重构 - >重命名
2.右键单击项目 - >重构 - >移动或
- 通过鼠标单击选择项目并使用快捷方式(Alt + Shift + R)-rename
- 通过鼠标单击选择项目并使用快捷方式(Alt + Shift + V)-move
醇>
答案 1 :(得分:0)
答案 2 :(得分:0)
我想做同样的事情,但是发现没有批量解决方案。我唯一可以做到的方法是使用IntelliJ
首先,尝试使用Refactor | Move
如果任何东西都是第三方或生成的(即不在您的src / main或src / test中),则不要移动它,并使用Refactor | Move
移动该名称空间中的所有其他名称空间/类,您可以使用多选功能进行操作。
当然,这将更改您移动的班级可以看到的班级。例如如果以前没有另一个lib位于同一个名称空间中,那么现在就不再存在,因此,如果没有显式导入,则不允许他们访问包中的内容。
这可能会导致许多Error creating bean with name...
类型错误。通过将ComponentScan
添加到抱怨的类中,并同时使用新的和旧的命名空间,也许可以解决其中的大部分问题
@ComponentScan({"com.mycompany.old.*", "com.mycompany.new.*"})
如果您也有一个Spring存储库,那么实体(Not a managed type
可能会遇到相同的问题。通过将以下内容添加到您的主应用程序中,以相同的方式解决它们。
@EntityScan({"com.mycompany.old.*", "com.mycompany.new.*"})