今天,我们在代码中发现了这个模式:
class Foo {
private List<String> errors;
public void addError(String error) { ... }
public List<String> getErrors();
}
尽管代码似乎可以工作,但这是一个单例Spring Bean,并且被注入到多个独立的地方,Bean的使用者假设他们每个人都有自己的错误列表。因此,这会引入微妙的错误。
显而易见的解决方案是教育开发人员避免这种错误,但我想知道是否有静态或运行时代码分析工具可以发现这种错误。
例如,Bean后处理器可以在返回Bean之前分析Bean并查找未标记为@Autowired
的私有字段。
@PostConstruct
。你不能在bean A中使用@PostConstruct
来重置字段,因为这也会清除bean B的列表。 - Aaron DigullaFoo
转换为原型是一种解决方法,但它并不能解决错误。我希望有一个单元测试能够告诉开发人员当他们犯这种错误时。 - Aaron Digulla