Spring bean定义和注入



我刚开始学习春天。我读了一些代码如下。但是我不明白ResultBuilderFactory如何返回正确的类。有人能解释一下吗?谢谢

public interface ResultBuilder{
public void print();
}
@Component
public class DefaultResultBuilder implement ResultBuilder{
public void print(){System.out.printlin("DefaultResultBuilder"};
}
@Component
public class HtmlResultBuilder implement ResultBuilder{
public void print(){System.out.printlin("HtmlResultBuilder"};
}
@Component
public class ResultBuilderFactory{
private final ResultBuilder defaultResultBuilder;
private final ResultBuilder htmlResultBuilder;
public ResultBuilder get(String name){
if(name.equal("HTML") return htmlResultBuilder;
return defaultResultBuilder;
}

更新:

只需更新组件注释的拼写错误。我的坏。。。我试了一下代码,结果出现了错误:";ResultBuilderFactory需要一个bean,但找到了2个。。。。考虑将其中一个bean标记为@Primary。。。或者使用@Qualifier"如果不使用Primary或@Qualifier ,原始代码如何工作

Spring将创建bean defaultResultBuilder和htmlResultBuilder。您需要将它们注入ResultBuilderFactory。

Lombok annotation@RequiredArgsConstructor执行构造函数注入。

@Component
@RequiredArgsConstructor
public class ResultBuilderFactory{
private final ResultBuilder defaultResultBuilder;
private final ResultBuilder htmlResultBuilder;
}

或者你可以使用现场注射。但它们不可能是最终的领域。

@Component
public class ResultBuilderFactory{
@Autowired
private  ResultBuilder defaultResultBuilder;
@Autowired
private  ResultBuilder htmlResultBuilder;
}

但如果可能的话,你应该选择构造器注入。参见讨论Spring@Autowire on Properties vs Constructor

最新更新