gpt4 book ai didi

java - 我们应该避免在不必要的时候使用 spring managed bean 吗?

转载 作者:行者123 更新时间:2023-12-04 21:59:20 27 4
gpt4 key购买 nike

假设我有一个相对复杂的类,需要通过分成几个较小的辅助类来简化它。一种建议的重构解决方案是:

public class RefactoredComplexClass {
private final Helper1 h1;
private final Helper2 h2;
// Helper1 and Helper2 will be injected by spring IoC
public RefactoredComplexClass(Helper1 h1, Helper2 h2) {
this.h1 = h1; this.h2 = h2;
}
}
public class Helper1 {// no state class
public int add(int x, int y) { return x + y ; }
}

上述建议背后的原因主要是为了简化基于 mockito 的测试。

我的问题是:1. 对于那些没有状态的辅助类,应该使用静态方法而不是实例方法吗?2.注入(inject)那些Helper对象是个好主意吗?

我自己的想法是应该使用静态方法,因为没有状态需要维护那些辅助类/方法。并且不需要注入(inject)那些辅助类的实例。但我确实同意上述解决方案在某种程度上使基于 mockito 的测试更容易,因为静态方法很难模拟。

有什么建议吗?

最佳答案

看看你的例子,静态方法似乎是可行的方法,也就是说,如果你确定辅助类是绝对无状态的,并且你可以很好地测试静态方法,那么这些类中的所有方法都是一堆实用方法。 (例如 java.lang.Math)

静态方法的几个注意事项:
1)静态绑定(bind)和更好的性能。2) 没有创建对象。3)方法不能被覆盖4)难以模拟5) 提前初始化

基于 Spring 的单例的注意事项(无状态助手最好是单例并注入(inject)到你的类中)
1)你至少有一个对象——你受益于继承、多态等2)可以延迟加载3)易于模拟测试

你可以阅读这个 useful article

关于java - 我们应该避免在不必要的时候使用 spring managed bean 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28844414/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com