Java-Struts Web应用程序的重构方法会引起争夺吗?
-
26-10-2019 - |
题
我正在与一家使用Java的Struts生产Web应用程序的公司合作。我最近一直在重构许多代码,以整理系统。我一直使用的一种技术是移动流的关闭语句 最后 实用程序类方法的块。实用程序类是静态的,并且针对各种流的流有了密切的方法。通过进行此类重构,我每次需要关闭流的流程时保存5行代码,这使某些类中的代码减少了600行,使其非常有利。但是,我担心这样做,如果投入生产,可能会对这些方法引起争议。
我只在多线程编程中遇到争论的概念,这就是为什么我不确定这是否会在这些情况下引起问题。
这可能吗?还是仅仅是我对争论,静态方法,Web应用程序等的误解?
预先感谢Alexei Blue。
解决方案
除非静态方法仅在其参数上运行,并且您不会尝试多次同时关闭相同的流,您应该可以。
通常可以同时执行方法。同步将始终在对象上起作用,因此,如果您在这些方法中使用的对象完全不同,则不应发生争执。
其他提示
在同一范围内关闭所有打开文件处理程序是最好的做法。例如,当一种方法中打开文件输出流时,也应使用该方法将其关闭。这也可以防止大多数并发问题(但并非总是如此)。但是,在这种情况下,没有这样做的许多例外,但是跟踪和关闭所有文件处理程序将更加困难。
仅供参考,存在一种闭合方法,该方法确实可以在Apache Common IO中执行您描述的内容, ioutils. 。这是一个受欢迎的库,您可能会考虑使用。
这是一个普遍的做法,例如,查看番石榴的闭合课。顺便说一句,您只需要一种方法即可在Java中关闭任何内容:
public static void closeQuietly(Closeable closeable) {
if (closeable != null) {
try {
closeable.close();
} catch (RuntimeException re) {
// Do something or ignore...
}
}
}
随着所有流和读者实现可封闭的接口,该方法应足以满足您的所有需求。
通常,这不会引起争论,除非您尝试从Say-a thead-a中的流中读取螺纹-B的关闭流。但是,如果真是这样,那么无论有没有这种重构,您都会有这种争论。仅此重构将不会引入任何 额外的 争论。