我有一个现有的弹簧(5.3.9)转换器.它是一个无状态转换器:没有成员,默认构造函数为空.使用此表单,它会被选中,并与我的系统配合良好:
class Conv implements Converter<A, B> {
public B convert(A a) {
...
}
}
向该转换器添加状态时(对另一个bean的任何引用):
class Conv implements Converter<A, B> {
// the state
private final X x;
public Conv(X x) {
this.x = x;
}
public B convert(A a) {
...
}
}
…The Problem:现在,转换器cannot be found at runtime:
未找到能够从类型[A]转换为类型[B]的转换器
转换器本身可以成功创建,并且仍然由生命周期进行 Select .依赖关系被很好地注入,并且它存在(位于构造函数内部的调试中).bean初始化过程中没有任何异常.
最后,在与同事讨论后,他建议在构造器的论点中增加@Lazy
:
class Conv implements Converter<A, B> {
// the state
private final X x;
public Conv(@Lazy X x) {
this.x = x;
}
public B convert(A a) {
...
}
}
令人惊讶的是,它解决了这个问题!现在可以在添加状态之前找到并使用转换器.
(update:我无法创建一个再现此问题的最小示例.它可能与我真正的beans依赖性有关……).
你能解释为什么@Lazy
会耍这个把戏吗?